【发布时间】:2017-06-12 02:10:31
【问题描述】:
我认为这将是一个很好的练习,可以进一步了解对象。
我试图弄清楚如何在更改对象的原始引用变量后再次引用该对象。
取以下代码:
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(),但不知道如何实现它们以便再次引用原始对象。
【问题讨论】:
-
你不能。将先前的值存储在一个临时变量中并通过它访问它。
-
hashCode()(和System.identityHashCode())不用于检索特定对象;它的值不能被解释为内存地址。哈希码用于确定两个对象是否绝对不相等。 -
@AndyTurner 所以如果两个对象有相同的
hash code,我们不能说它们有相同的内存地址? -
@Shashwat
String a = "hello"; String b = new String("hello"); System.out.println(a == b); System.out.println(a.hashCode() == b.hashCode());. -
我想说
hashCode更多的是用于创建对象的整数表示。例如,它用于哈希表,其中哈希码的唯一性是一个加分项,使用内存地址可以提供良好的唯一性。
标签: java variables object memory reference