如果我们更改字符串的值,则将创建一个新对象。那么我们如何访问上一个字符串对象

时间:2019-02-13 05:10:30

标签: java string

我们知道,字符串本质上是不可变的。
如果我们想更改字符串的值,那么将在堆区域的字符串池内分配一个新地址。但最后,我们正在更改字符串的值。那么,如果需要,我们如何才能访问它的前一个字符串值?

ArrayList

2 个答案:

答案 0 :(得分:0)

如果这是在 Java 中使用的,那么您不能访问以前的值,直到您复制了以前的str

您可以使用setter并实现一种机制来保留旧值

private String str;
private String previous;

setStr(String s)
{
    previous = str;
    str = s;
}

您可以在线程下面查看一些方法:

Can you get the previous value of a variable in Java?

答案 1 :(得分:0)

String.hashcode()Object.hashcode()不同,因为String类将此方法重写为该值。
s[0]*31^(n - 1) + s[1]*31^(n - 2) + ... + s[n - 1]
(参考:https://www.tutorialspoint.com/java/java_string_hashcode.htm

要从Object.hashcode()中查找哈希码,请使用System.identityHashCode(Object x)

甚至Object.hashcode()也不等于对象的内存地址。 (哈希码是从“内存”地址生成的,但不相等。)

引用https://coderanch.com/t/476276/java/Object-based-hashcode黄贯中的回答,

  

身份哈希码不是对象的位置/地址。它可能最初是使用该地址生成的。但是,即使您可以从身份哈希码计算地址,垃圾回收器也会移动对象(而身份哈希码不变)。如果内存地址和对象的身份哈希码之间存在关联,则不会保留很长时间。

因此您也无法获取内存地址,也无法从内存地址获取上一个值。