如果这是重复的内容,请原谅我,我似乎找不到能解释我所见的一切的东西。

以下程序:

    Object a = new Object();
    Object b = a;

    System.out.println( "a: " + a );
    System.out.println( "b: " + b );

    a = null;

    System.out.println( "a: " + a );
    System.out.println( "b: " + b );

产生此:
a: java.lang.Object@3e25a5
b: java.lang.Object@3e25a5
a: null
b: java.lang.Object@3e25a5

但是为什么?!? 我对此感到很困惑。 “b”不应该引用“a”吗?因此,如果“a”不再引用其他任何内容(例如:null),那么不应该“b”吗?我显然在这里缺少基本的东西。

提前致谢。

编辑#1

我认为让我失望的是我正在打印地址。出于某种原因,在我看来,我正在打印出一些神奇的值来指示指针\引用-实际上,设置b = a不能使它们相同时,它只是在堆上创建指向同一位置的新指针。我希望这对其他人有帮助。

最佳答案

b未引用a,它引用的是执行分配时a所引用的同一对象。

我知道这是不一样的语言,但是如果您熟悉 C ,它就像:

int someNum = 5;
int * a = &someNum; // a points to someNum
int * b = a; // b points to someNum too
a = NULL; // a doesn't point to anything (points to address 0), b still points to someNum

(我使用了C,因为它使地址和引用更清晰了)

09-30 14:39
查看更多