我认为这对于理解对象更有用。
我试图找出在更改对象的原始引用变量后如何再次引用对象。
请使用以下代码:
String person = "person a"; //Line 1
person = "person b"; //Line 2
现在,第1行创建了一个新的String对象,引用变量为person
。第2行将该引用变量分配给另一个新的String对象。原始的String对象现在没有引用变量。
我如何圈回并引用第1行内存中已有的原始String对象?比方说,将引用变量person
分配回原始的String对象?作为后来的想法(并不是我对垃圾收集知之甚少),但是原始对象是否有资格进行垃圾收集,因为它在第2行之后不再有引用变量,因此没有资格再次引用?
我看到了hashCode()
方法,还有System.identityHashCode()
,但无法弄清楚如何实现它以便再次引用原始对象。
答案 0 :(得分:3)
第3行:person = "person a";
Java有一个String
实习缓存。现在,如果它不是String
(或其他一些缓存类型),答案就是你没有。因为引用的对象有资格进行垃圾回收(它不再有引用)。你可以验证这个,
String person = "person a"; //Line 1
System.out.println(person.hashCode());
person = "person b"; //Line 2
person = "person a"; //Line 3
System.out.println(person.hashCode());
将两次显示相同的hashCode;因为它是同一个实例。
答案 1 :(得分:0)
分配新字符串
后person = "person b";
第一个消失了...... 你将无法使用它,因为你丢失了他的地址。