创建对象的副本而不复制它的属性引用

Und*_*ned 0 java

解释:

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

Cod*_*ice 5

您有两种选择:

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)

注意:我省略了任何不会改变的代码.