在编程的时候会碰到一个很无解的问题:比如现在有两个对象,一个对象改了某个属性后,有可能另一个对象也跟着变了。
如以下代码:
A.java:
private String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Main.java:
A a1 = new A();
A a2 = new A();
a1.setName("1");
a2 = a1;
a2.setName("2");
System.out.println("a1==" + a1.getName());
System.out.println("a2==" + a2.getName());
输出的结果:
a1=2;
a2=2;
传引用的时候是把自己的地址给前一个对象,改数据的话自然都会变
通过clone就可以解决这个问题:
A.java:
public class A implements Cloneable {
public A() {
}
private String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
A a = null;
a = (A) super.clone();
return a;
}
}
Main.java:
public static void main(String[] args) throws CloneNotSupportedException {
// TODO Auto-generated method stub
A a1 = new A();
A a2 = new A();
a1.setName("1");
a2 = (A) a1.clone();
a2.setName("2");
System.out.println("a1==" + a1.getName());
System.out.println("a2==" + a2.getName());
}
输出的结果:
a1=1;
a2=2;
clone应该是给前一个对象开辟了一个新的地址