public class Practice {
public int value;
public Practice child;
public Practice(int value) {
this.value = value;
}
public static void main(String[] args) {
Practice obj = new Practice(10);
Practice obj2 = new Practice(9);
Practice obj3 = new Practice(11);
obj.child = obj3;
obj.child = obj2;
System.out.println(obj2 == obj3);
}
}
在这段代码中,因为我做了 obj.child = obj3,所以我认为你可以用 obj3 代替 obj.child,换句话说,“obj.child = obj2”这行可能意味着“obj3 = obj2”。但是,在 print 语句中它返回 false。
但是,如果你做类似的事情
obj.child = obj3;
obj.child.value = obj2.value;
然后你实际上是在操纵 obj3 因为它的值发生变化,但是在前面的代码中 obj3 只是“替换”但是对象保持不变。
这里也一样:
obj.child = obj3;
obj2 = obj.child;
现在它们实际上是相等的……所以你可以用 obj3 代替 obj.child?现在我很困惑......有点新手编码所以如果有人能为我解决这个问题我将不胜感激。谢谢!
这是每行代码之后发生的事情。
Practice obj = new Practice(10);
// HEAP
// ====
// +--------------+
// obj ----> + Practice(10) +
// +--------------+
Practice obj2 = new Practice(9);
// HEAP
// +--------------+
// obj ----> + Practice(10) +
// +--------------+
//
// +-------------+
// obj2 ----> + Practice(9) +
// +-------------+
Practice obj = new Practice(10);
// HEAP
// ====
// +--------------+
// obj ----> + Practice(10) +
// +--------------+
//
// +-------------+
// obj2 ----> + Practice(9) +
// +-------------+
//
// +--------------+
// obj3 ----> + Practice(11) +
// +--------------+
obj.child = obj3;
// HEAP
// ====
// +--------------+
// obj ----> + Practice(10) +
// + child -------------+
// +--------------+ |
// |
// +-------------+ |
// obj2 ----> + Practice(9) + |
// +-------------+ |
// |
// +--------------+ |
// obj3 ----> + Practice(11) + <----+
// +--------------+
obj.child = obj2;
// HEAP
// ====
// +--------------+
// obj ----> + Practice(10) +
// + child -------------+
// +--------------+ |
// |
// +-------------+ |
// obj2 ----> + Practice(9) + <------+
// +-------------+
//
// +--------------+
// obj3 ----> + Practice(11) +
// +--------------+