假设我有一个包含字符串的对象,如下所示:
class SomeObject {
private final String s;
private final int i;
SomeObject(String s, int i) {
this.s = s;
this.i = i;
}
String getString() {
return s;
}
}
因此,如果我只使用不带SomeObject
的引用,例如我用来构建另一个对象而我不需要i
和任何其他可能的字段,它是否会被垃圾收集?< / p>
编辑:我很抱歉不清楚。事情就是说我有一个名为someObject的SomeObject实例,如果我让s引用使用getString()方法转义,即someObject.getString()并使用返回引用构建一些其他对象,例如:不是SomeObject实例,someObject可以被垃圾收集吗?
答案 0 :(得分:2)
我想你是指s
?是的,SomeObject
的实例可以免费收集垃圾。 String
不会引用它所源自的SomeObject
。
答案 1 :(得分:2)
getString()
将返回s
,但不会从当前SomeObject
“删除”它。如果将值x
分配给s
s = x;
如果您将新值x
分配给y
, s
将仅进行垃圾回收
s = y;
并且没有提及x
左。
答案 2 :(得分:2)
让我问你这个。
final class Foo {
String value = "initial";
}
假设您按如下方式执行代码......
final Foo foo = new Foo();
final String val = foo.value;
foo.value = "replaced";
现在,您认为val
现在会等于"replaced"
吗?希望不是,因为它不会;看来你对参考是什么有一些误解。使用val = foo.value
,您将字段foo.value
的值复制到val
;该值是对"initial"
字符串的引用。 不是对字段foo.value
的引用。坚持"initial"
的引用不会阻止foo
被垃圾收集。