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=obj 3,所以我认为您可以将obj.child替换为obj.child,以便换句话说,“obj.child=obj 2”行可能意味着“obj 3=obj 2”。但是,在打印语句中它返回false。
然而,如果你做了这样的事情
obj.child.value = obj3.value;
obj.child = obj2.value;
然后您实际上是在操作oby3,因为它的值发生了变化,但是在前面的代码中,oby3只是被“替换”,但是对象保持不变。
这里也一样:
obj.child = obj3;
obj2 = obj.child;
现在它们实际上是相等的…所以你可以用obj. child代替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) +
// +--------------+