解释:
public class SomeClass {
int aNumber = 0;
public void changeNumber(int number){
aNumber = number;
}
public int getNumber(){
return aNumber;
}
}
public class Testapp {
public static void main(String[] args) {
NewClass object1 = new NewClass();
NewClass object2 = object1;
object1.changeNumber(5);
object2.changeNumber(2);
System.out.println("object1: "+object1.getNumber());
System.out.println("object2: "+object2.getNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
这将输出:object1:2 object2:2
我如何输出:object1:5 object2:2
您有两种选择:
1)实现复制构造函数:
public SomeClass(SomeClass c) {
this.aNumber = c.aNumber;
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个副本:
SomeClass object2 = new SomeClass(object1);
Run Code Online (Sandbox Code Playgroud)
2)实现Cloneable接口并覆盖Object.clone():
public class SomeClass implements Cloneable {
public SomeClass clone() {
super.clone();
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个副本:
SomeClass object2 = object1.clone();
Run Code Online (Sandbox Code Playgroud)
注意:我省略了任何不会改变的代码.