更改原始引用变量

时间:2017-01-26 14:56:42

标签: java variables object memory reference

我认为这对于理解对象更有用。

我试图找出在更改对象的原始引用变量后如何再次引用对象。

请使用以下代码:

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(),但无法弄清楚如何实现它以便再次引用原始对象。

2 个答案:

答案 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";

第一个消失了...... 你将无法使用它,因为你丢失了他的地址。