在Java程序中,将对象设置为另一个对象是否正确?更具体地说,我正在学习二叉树,我注意到以下代码:
public Node find(int key)
{
Node current = root;
while(current.iData != key)
{
if(key < current.iData)
{
current = current.leftChild;
} else {
//...
}
}
}
Node current = root;
和current - current.leftChild;
都将对象设置为另一个对象。这是对的吗?
答案 0 :(得分:2)
将对象设置为另一个对象。这是对的吗?
不,那不对。
实际发生的是,您正在将一个变量的引用更改为另一个对象。
所以:
Node current = root; // "current" will point at the same object as `root`.
和
current = current.leftChild; // "current" will point at the same object as `leftChild`.
注意 -
在使用=
分配引用类型时,使用=
分配基元类型时,行为完全不同。
答案 1 :(得分:1)
首先,您需要在Java中使用基本概念: Java通过引用操作对象,所有对象变量都是引用。
所以,当你有Object o1
和Object o2
时,实际上o1和o2只是对存储空间的引用,它包含对象而不是对象本身。
当你有o1 == o2时,你正在比较两个引用而不是对象本身,但如果你想比较它们,你需要覆盖equals()
方法。
现在,我们来谈谈你的情况:
Node current = root;
这意味着当前和根指的是同一个对象(内存中的相同位置)。 所以只有一个对象和两个引用。