我们知道,字符串本质上是不可变的。
如果我们想更改字符串的值,那么将在堆区域的字符串池内分配一个新地址。但最后,我们正在更改字符串的值。那么,如果需要,我们如何才能访问它的前一个字符串值?
ArrayList
答案 0 :(得分:0)
如果这是在 Java 中使用的,那么您不能访问以前的值,直到您复制了以前的str
。
您可以使用setter并实现一种机制来保留旧值
private String str;
private String previous;
setStr(String s)
{
previous = str;
str = s;
}
您可以在线程下面查看一些方法:
答案 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黄贯中的回答,
身份哈希码不是对象的位置/地址。它可能最初是使用该地址生成的。但是,即使您可以从身份哈希码计算地址,垃圾回收器也会移动对象(而身份哈希码不变)。如果内存地址和对象的身份哈希码之间存在关联,则不会保留很长时间。
因此您也无法获取内存地址,也无法从内存地址获取上一个值。