我可以在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 {

在Java程序中,将一个对象设置为另一个对象是否正确?更具体地说,我正在研究二叉树,我在下面的代码中注意到:

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`.