请原谅我,如果这是重复,我似乎无法找到解释我所看到的东西的任何东西.
以下程序:
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不是使它们相同时,它只是创建一个指向堆上相同位置的新指针.我希望这有助于其他人.
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,因为它更清晰地显示了地址和参考)
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |