在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和对象本身不受影响. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |