Java 对象的赋值(复制)

今天被这个问题搞得头都大了,一直用等于号赋值,今天发现一些莫名其妙的错误,看了好多文章才发现,原来对象赋值不能用等于号,等于只能用于主类型的赋值(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();
	}
}

© 2011, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记