加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在java中销毁对象

发布时间:2020-12-15 05:12:41 所属栏目:Java 来源:网络整理
导读:如果我设置一个空值的对象,Java会破坏原始对象吗? 例如: Foo f = new Foo();// ...Foo b = f; 如果我现在将b设置为null,f是否也变为空?这种行为的通用名称是什么? 解决方法 不是.所有设置b为null都是从b中删除对象的引用. f仍然会引用该对象.如果还将f设
如果我设置一个空值的对象,Java会破坏原始对象吗?

例如:

Foo f = new Foo();
// ...
Foo b = f;

如果我现在将b设置为null,f是否也变为空?这种行为的通用名称是什么?

解决方法

不是.所有设置b为null都是从b中删除对象的引用. f仍然会引用该对象.如果还将f设置为null,则该对象将没有未完成的引用,并最终将被垃圾回收.

让我们在这里抛出一些ASCII艺术:

首先我们这样做:

Foo f = new Foo();

并在内存中得到这个:

+------------+
|     f      |
+------------+     +-----------------------+
| (Ref #123) |---->|       Foo #123        |
+------------+     +-----------------------+
                   | (data for the object) |
                   +-----------------------+

(显然,#123只是为了给出一个关于ref确实有一些特定值的想法;我们从来没有看到实际值,但JVM确实如此.)

然后,如果我们这样做:

Foo b = f;

我们有:

+------------+
|     f      |
+------------+
| (Ref #123) |--+
+------------+  |
                |
                |  +-----------------------+
                +->|       Foo #123        |
+------------+  |  +-----------------------+
|     b      |  |  | (data for the object) |
+------------+  |  +-----------------------+
| (Ref #123) |--+
+------------+ 

如果我们这样做的话

b = null;

我们有:

+------------+
|     f      |
+------------+     +-----------------------+
| (Ref #123) |---->|       Foo #123        |
+------------+     +-----------------------+
                   | (data for the object) |
+------------+     +-----------------------+
|     b      |
+------------+
| null       |
+------------+ 

如您所见,f和对象本身不受影响.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读