Java 修改当前对象后,如何获取旧字符串对象值

Java 修改当前对象后,如何获取旧字符串对象值,java,Java,如果字符串是不可变对象,每当我们修改字符串对象时,它将创建另一个实例,即在内存中,当前有两个对象。如何获取第一个初始化值的值 public class MutableVsImmutable { public static void main(String[] args) { String str1 = new String("Dilip"); System.out.println(str1.hashCode()); str1 = st

如果字符串是不可变对象,每当我们修改字符串对象时,它将创建另一个实例,即在内存中,当前有两个对象。如何获取第一个初始化值的值

public class MutableVsImmutable {

    public static void main(String[] args) {

        String str1 = new String("Dilip");

        System.out.println(str1.hashCode());
        str1 = str1 + " Singh";
        System.out.println(str1.hashCode());

        **// Here I want to get first initialized value of "str1" i.e. "Dilip"** 

    }

}

只需保留对旧字符串的引用

String orig = "ORIG";
String anotherOrigReference = orig;
orig = "CHANGED";
System.out.println(orig); // Prints CHANGED
System.out.println(anotherOrigReference); // PRints ORIG

字符串在java中是不可变的,因此当您操作字符串时,创建了一个新对象,对上一个对象的引用丢失。无法恢复它。Java提供了StringBuffer和StringBuilder来处理这种情况。需要注意的重要一点是,当您操作StringBuilder对象时,不会创建新对象。您可以这样使用它

StringBuilder str1 = new StringBuilder("Dilip");
System.out.println(str1.hashCode());
str1 = str1 + " Singh";
System.out.println(str1.hashCode());

剪掉你附加在那里的部分。如果它是随机的,那么您就无法取回旧字符串。如果我使用的是StringBuffer或StringBuilder,即可变类,无论何时我们修改它,它都将覆盖当前对象。因此,毫无疑问获得旧值。如果旧引用丢失,那么为每次修改创建新引用又有什么用呢?如果我是对的,在这种情况下,不必要的内存占用会持续一段时间。因为字符串在java中是不可变的和最终的(它有自己的优势),java通过创建新对象以自己的方式处理它。当然,它会产生不必要的开销,这就是为什么在处理字符串时建议使用可变类的原因。