Java Object#clone behavior?

时间:2017-02-11 22:57:15

标签: java clone

我正在测试Object#clone方法的行为,我不明白为什么以下代码打印为true,Diego,Diego,我期待它打印为true,Diego,Armando,因为p.getName()== p2 .getName()打印为true。可以请任何人解释为什么p2.setName(“Armando”)没有修改p对象,如果他们指向相同的字符串?谢谢。

public class Main {

public static void main(String[] args) {
    Person p = new Person();
    p.setName("Diego");
    Person p2 = null;
    try {
         p2 = (Person) p.clonar();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
    System.out.println(p.getName() == p2.getName());
    System.out.println(p.getName());
    p2.setName("Armando");
    System.out.println(p.getName());
}
}

class Person implements Cloneable {
private String name;

public Object clonar() throws CloneNotSupportedException {
    return this.clone();
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

1 个答案:

答案 0 :(得分:0)

因为那时两个引用都指向同一个String对象。但是,当您调用p2.setName时,p2的名称引用指向另一个String对象。答案由@dunni提供

要重现我想要的行为,我首先需要添加一个可变的类作为占位符(地址):

List=[]
c=1
For n in list:
        If(n==list[c]):
             list.pop(c)
        C+=1

现在打印:

paseo de la reforma

lomas de chapultepec