将变量设置为null是否仅清除引用?

Fra*_*ani 5 java null reference

如果我这样做会发生什么:

Object obj = new Object();
obj = null;
Run Code Online (Sandbox Code Playgroud)

它是从内存中删除对象还是仅清除引用?

更正式地,考虑代码:

Object obj = new Object();
Object temp = obj;
obj = null;
Run Code Online (Sandbox Code Playgroud)

为什么temp还没有null?它不应该从记忆中删除吗?

Yas*_*jaj 14

在你的第一个例子中:

obj -------> |OBJECT|
Run Code Online (Sandbox Code Playgroud)

设置objnull:

obj          |OBJECT|
Run Code Online (Sandbox Code Playgroud)

不存在对该对象的引用,因此它"不存在",因为它已无法访问.


在你的第二个例子中:

obj -------> |      |
             |OBJECT|
temp ------> |      |
Run Code Online (Sandbox Code Playgroud)

设置objnull:

obj          |      |
             |OBJECT|
temp ------> |      |
Run Code Online (Sandbox Code Playgroud)

您可以看到temp仍然引用该对象,因此它仍然"存在".