java null引用复制

jav*_*y79 5 java reference

请原谅我,如果这是重复,我似乎无法找到解释我所看到的东西的任何东西.

以下程序:

    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 );
Run Code Online (Sandbox Code Playgroud)

收益率:

a: java.lang.Object@3e25a5
b: java.lang.Object@3e25a5
a: null
b: java.lang.Object@3e25a5
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

编辑#1

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

MBy*_*ByD 8

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
Run Code Online (Sandbox Code Playgroud)

(我使用了C,因为它更清晰地显示了地址和参考)