如何在更改原始引用变量后再次引用 Java 对象

How to reference a Java object again after changing the original reference variable

我认为这将是一个很好的练习,可以帮助您更多地了解对象。

我想弄清楚如何在更改对象的原始引用变量后再次引用对象。

取如下代码:

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

第 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;因为是同一个实例。

分配新字符串后

person = "person b";

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