2013-03-21 63 views
0

我想建立一个方法来深拷贝类:深度复制尝试

public MyClass clne() { 
    MyClass cpy = new MyClass(); 
    cpy.var1 = getVar1(); //getVar1 is a method returning the value of var1 
    cpy.var2 = getVar2(); 
    return cpy; 
} 

然而,当我运行:

MyClass x = new MyClass(); 
x.var1 = 18; 
MyClass y = x.clne(); 
y.myMethod(); // Where myMethod is a method changing the value of var1 to, say 4. 
System.out.println(x.var1); 

x.var1的值是4

我做错了什么? 谢谢:)

+0

发布更多验证码? – Patashu 2013-03-22 00:00:54

+0

'var1'和'var2'的类型是什么?他们是“int”吗? 'Integer'? – rgettman 2013-03-22 00:01:53

+1

即使它是'Integer',当然''Integer'是不可变的吗? – Patashu 2013-03-22 00:02:20

回答

0

你应该创建一个新的var1实例,而不是指向旧的引用,除非它们是基元。

cpy.var1 = new Var1(getVar1()); 

这将要求你为任何类Var1编写一个拷贝构造函数。这可以通过其他方式完成。

希望有所帮助。

PS,你基本上是做一个浅拷贝。

+0

OP说它们是原始的,而不是对象 – Patashu 2013-03-22 00:04:13

+0

它是新的Var1还是新的var1? (如果有区别) – Dario 2013-03-22 00:04:38

+0

取决于var1的类型。当你用x.var1 = 4赋值时,我认为它必须是int或Integer,这意味着你写的应该没问题,除非它们是静态成员 – 2013-03-22 00:28:53