如果我用一个null值设置一个对象,Java会破坏原始对象吗?
例如:
Foo f = new Foo();
// ...
Foo b = f;
Run Code Online (Sandbox Code Playgroud)
如果我现在设置b到null不f成为也null?这种行为的通用名称是什么?
T.J*_*der 12
不.所有设置b到null所做的就是删除引用从对象b.f仍会有对象的引用.如果你也设置f为null,那么该对象将没有未完成的引用,并最终将被垃圾回收.
让我们在这里抛出一些ASCII艺术:
首先我们这样做:
Foo f = new Foo();
Run Code Online (Sandbox Code Playgroud)
并在内存中得到这个:
+------------+
| f |
+------------+ +-----------------------+
| (Ref #123) |---->| Foo #123 |
+------------+ +-----------------------+
| (data for the object) |
+-----------------------+
(显然,#123只是为了给出一个关于ref确实有一些特定值的想法; 我们从来没有看到实际值,但JVM确实如此.)
然后,如果我们这样做:
Foo b = f;
Run Code Online (Sandbox Code Playgroud)
我们有:
+------------+
| f |
+------------+
| (Ref #123) |--+
+------------+ |
|
| +-----------------------+
+->| Foo #123 |
+------------+ | +-----------------------+
| b | | | (data for the object) |
+------------+ | +-----------------------+
| (Ref #123) |--+
+------------+
如果我们这样做的话
b = null;
Run Code Online (Sandbox Code Playgroud)
我们有:
+------------+
| f |
+------------+ +-----------------------+
| (Ref #123) |---->| Foo #123 |
+------------+ +-----------------------+
| (data for the object) |
+------------+ +-----------------------+
| b |
+------------+
| null |
+------------+
如您所见,f对象本身不受影响.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |