java 混淆对象指针/相等

ewm0tg9j  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(92)
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 3代替obj.child,换句话说,“obj.child = obj 2”行可以表示“obj 3 = obj 2”。然而,在print语句中,它返回false。
但是,如果您执行以下操作

obj.child = obj3;
obj.child.value = obj2.value;

然后你实际上是在操作obj 3,因为它的值发生了变化,然而在前面的代码中,obj 3只是被“替换”了,而对象保持不变。
同样的事情:

obj.child = obj3;
obj2 = obj.child;

现在他们实际上是平等的...所以你可以subsitute obj 3为obj.孩子?现在我很困惑...有点新手编码器,所以我会很感激,如果有人会澄清这一点对我来说。谢谢!!

wn9m85ua

wn9m85ua1#

这就是在你的每一个代码行之后发生的事情。

1

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) +
//                 +--------------+

4

obj.child = obj3;
// HEAP
// ====
//                +--------------+
//      obj ----> + Practice(10) +
//                +    child -------------+
//                +--------------+        |
//                                        |
//                 +-------------+        |
//      obj2 ----> + Practice(9) +        |
//                 +-------------+        | 
//                                        |
//                 +--------------+       |
//      obj3 ----> + Practice(11) +  <----+
//                 +--------------+

5

obj.child = obj2;
// HEAP
// ====
//                +--------------+
//      obj ----> + Practice(10) +
//                +    child -------------+
//                +--------------+        |
//                                        |
//                 +-------------+        |
//      obj2 ----> + Practice(9) + <------+
//                 +-------------+         
//                                        
//                 +--------------+       
//      obj3 ----> + Practice(11) +
//                 +--------------+

相关问题