据我所知,当一个对象分配给另一个对象(例如 o2 = o1)时,o2 指向 o1 指向的实际对象。因此,实际对象的任何变化对于两个对象都是可见的。假设我们有两个名为 A1 和 A2 的类,如下所示:
class A1{
int a; A2 a2;
A1(int a, A2 a2) {
this.a = a; this.a2 = a2; }
public void setA(int a) { this.a = a;}
public void setA2(A2 a2) { this.a2 = a2;}
public int getA() { return a;}
public A2 getA2() { return a2;}
}
class A2 {
int b;
A2(int b) { this.b = b;}
public void setB(int b) { this.b = b;}
public int getB() { return b;}
}
在我们的主要功能中:
A1 o1 = new A1(10, new A2(20));
A1 o2 = o1;
System.out.println("o2==="+o2.toString());
o1.setA(12);
o1.setA2(new A2(22));
System.out.println("o2==="+o2.toString());
结果如下:
o2=(10,20)
o2=(12,22)
通过 A1 o2 = o1 语句,o2.a2 指向 o1.a2(它们是引用类型)。因此,通过执行 o1.setA2(new A2(22)) 语句,为 o1.a2 创建了一个新对象,但 o2.a2 指向的前一个对象不应更改。因此我希望第二个输出必须是(12,20)。请帮助我为什么第二个输出是(12,22)而不是(12,20)???