我可以在Java中将一个对象定义为等同于另一个对象吗?
在Java程序中,将一个对象设置为另一个对象是否正确?更具体地说,我正在研究二叉树,我在下面的代码中注意到:我可以在Java中将一个对象定义为等同于另一个对象吗?,java,Java,在Java程序中,将一个对象设置为另一个对象是否正确?更具体地说,我正在研究二叉树,我在下面的代码中注意到: public Node find(int key) { Node current = root; while(current.iData != key) { if(key < current.iData) { current = current.leftChild; } else {
public Node find(int key)
{
Node current = root;
while(current.iData != key)
{
if(key < current.iData)
{
current = current.leftChild;
} else {
//...
}
}
}
公共节点查找(int键)
{
节点电流=根;
while(current.iData!=键)
{
如果(键
这两个节点当前=根
和current-current.leftChild代码>正在将一个对象设置为另一个对象。是这样吗
将一个对象设置为另一个对象。是这样吗
不,那不对
实际发生的是,您正在将一个变量的引用更改为另一个对象
因此:
及
注-
当使用=
分配基本类型时,使用=
分配引用类型时是一种完全不同的行为。首先,您需要Java中的一个基本概念:Java确实通过引用操作对象,并且所有对象变量都是引用
因此,当您有对象o1
和对象o2
时,实际上o1和o2只是对存储对象的内存空间的引用,而不是对象本身
当o1==o2时,比较的是两个引用,而不是对象本身,但如果要比较它们,则需要重写equals()
方法
现在,让我们谈谈你的情况:
节点电流=根代码>这意味着current和root引用的是同一个对象(内存中的同一位置)因此只有一个对象和两个引用 这不是它所做的,不。您正在将当前设置为不同的实例。阅读并理解好的答案,我只想补充一点,为了进一步阅读OP,可以在中找到更多详细信息。
Node current = root; // "current" will point at the same object as `root`.
current = current.leftChild; // "current" will point at the same object as `leftChild`.