一聚教程网:一个值得你收藏的教程网站

热门教程

Java对象的赋值一些技巧介绍

时间:2022-06-29 02:55:32 编辑:袖梨 来源:一聚教程网


一直用等于号赋值,今天发现一些莫名其妙的错误,看了好多文章才发现,原来对象赋值不能用等于号,等于只能用于主类型的赋值(String,int,float之类),而如果是其他的类生产的对象,用等于号是映射,并非赋值,只要改了等号一边的值,另一边的也跟着变化,就是说JAVA没有开辟新的内存,只是给原来的对象再起了个名字而已。
如果需要赋值,就需要类实现Cloneable接口,实现clone()方法。

 代码如下 复制代码
class D implements Cloneable{//实现Cloneable接口
 String sex;
 D(String sex){
  this.sex=sex;
 }
 @Override
 protected Object clone() throws CloneNotSupportedException {
  // 实现clone方法
  return super.clone();
 }
}

赋值的时候:

 代码如下 复制代码

D d=new D("男");
D d2=(D) d.clone();//把d赋值给d2

如果类中的变量不是主类型,而是对象,也需要调用该对象的clone()方法
下面是一个完整的例子:

 代码如下 复制代码

public class Test2 {
 public static void main(String[] args) throws CloneNotSupportedException {
  // TODO Auto-generated method stub
  D d=new D("男");
  C c=new C("张三","20",d);
  C new_c=(C) c.clone();//调用clone方法来赋值
  new_c.name="李四";
  d.sex="女";//d
  System.out.println(c.d.sex);
  System.out.println(c.name);
 
 }
 
}
 
class C implements Cloneable{
 String name;
 String age;
 D d;
 C(String name,String age,D d) throws CloneNotSupportedException{
  this.name=name;
  this.age=age;
  this.d=(D) d.clone();//调用clone方法来赋值,这样即便外部的d发生变化,c里的也不会变
 }
 @Override
 protected Object clone() throws CloneNotSupportedException {
  // TODO Auto-generated method stub
  return super.clone();
 }
}
class D implements Cloneable{//实现Cloneable接口
 String sex;
 D(String sex){
  this.sex=sex;
 }
 @Override
 protected Object clone() throws CloneNotSupportedException {
  // 实现clone方法
  return super.clone();
 }
}

热门栏目