この時点では両方の参照が同じStringオブジェクトを指しているためです。ただし、p2.setNameを呼び出すと、p2の名前参照は別のStringオブジェクトを参照します。
public class Main {
public static void main(String[] args) {
Person p = new Person();
Person p2 = null;
Address address = new Address("paseo de la reforma");
p.setAddress(address);
try {
p2 = (Person) p.clonar();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
p2.getAddress().setStreet("lomas de chapultepec");
System.out.println(p.getAddress().getStreet());
}
}
class Address {
private String street;
public Address(String street) {
this.street = street;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
class Person implements Cloneable {
private String name;
private Integer edad;
private int mes;
private Address address;
public Integer getEdad() {
return edad;
}
public void setEdad(Integer edad) {
this.edad = edad;
}
public int getMes() {
return mes;
}
public void setMes(int mes) {
this.mes = mes;
}
public Object clonar() throws CloneNotSupportedException {
return this.clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
この今版画:
パセオ・デ・ラ・@dunni
が提供する回答は、私は、私はプレースホルダ(アドレス)として働く可変クラスを追加する最初の必要たかった現象を再現しますレフォルマ
ロマスデチャプルテペック
あなたは 'p2'、ない' p'の名前を設定しているので、名前が変更されていません... – Li357
しかし、私はCを理解して唯一のメソッドは浅いコピーを作成するため、両方のオブジェクトが同じ文字列を指します –
オブジェクトはそのクローンと等しくないので、 'p2!= p'です。したがって、 'p2'の名前を設定しても' p'の名前には影響しません。 – Li357