如何在更改原始引用变量后再次引用Java对象
我认为这将是一个很好的练习,有助于进一步了解对象 我试图弄清楚在更改对象的原始引用变量后如何再次引用对象 以下面的代码为例:如何在更改原始引用变量后再次引用Java对象,java,variables,object,memory,reference,Java,Variables,Object,Memory,Reference,我认为这将是一个很好的练习,有助于进一步了解对象 我试图弄清楚在更改对象的原始引用变量后如何再次引用对象 以下面的代码为例: String person = "person a"; //Line 1 person = "person b"; //Line 2 现在,第1行创建了一个新的字符串对象,其引用变量为person。第2行将该引用变量分配给另一个新字符串对象。原始字符串对象现在没有引用变量 我如何返回并引用第1行内存中已经存在的原始字符串对象?比方说,将引用变量person
String person = "person a"; //Line 1
person = "person b"; //Line 2
现在,第1行创建了一个新的字符串对象,其引用变量为person
。第2行将该引用变量分配给另一个新字符串对象。原始字符串对象现在没有引用变量
我如何返回并引用第1行内存中已经存在的原始字符串对象?比方说,将引用变量person
分配回原始字符串对象?作为后续思考(我对垃圾收集了解不多),但原始对象是否有资格进行垃圾收集,因为它在第2行之后不再有引用变量,因此没有资格再次被引用
我看到了hashCode()
方法,还有System.identityHashCode()
,但不知道如何实现这一切,以便再次引用原始对象。第3行:person=“person a”
Java有一个String
intern缓存。现在,如果它不是一个字符串(或其他一些缓存类型),那么答案是您没有。因为referecned对象符合垃圾收集的条件(它不再有引用)。你可以这样验证它
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());
它将显示相同的哈希代码两次;因为它是同一个实例。在分配新字符串之后
person = "person b";
第一个消失了。。
您将无法使用它,因为您丢失了他的地址。您不能。将以前的值存储在临时变量中,并通过该变量访问它。hashCode()
(和System.identityHashCode()
)不用于检索特定对象;它的值不能解释为内存地址。哈希代码用于确定两个对象是否绝对不相等。@因此,如果两个对象具有相同的哈希代码
,我们不能说它们具有相同的内存地址?@ShashwatString a=“hello”;字符串b=新字符串(“你好”);System.out.println(a==b);System.out.println(a.hashCode()==b.hashCode())代码>。我想说,hashCode
更适合于创建对象的整数表示。例如,用于哈希表,其中哈希代码的唯一性是一个加号,使用内存地址可以提供良好的唯一性级别。因此,如果字符串等于先前创建的字符串对象,它将只使用原始对象,但是,对于大多数其他对象,一旦它们不再有引用变量(或者一开始就没有引用变量),您就无法再次使用它们了。但需要注意的是,“Aa”
和“BB”
具有相同的hashcode;但它们是不同的对象。(当然,“Aa”
和新字符串(“Aa”)
具有相同的hashcode,但它们也是不同的对象)。哈希代码不能用于“定位”特定对象。