如果这是重复的内容,请原谅我,我似乎找不到能解释我所见的一切的东西。
以下程序:
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,因为它使地址和引用更清晰了)