我读到很多东西,字符串对象是不可变的,只有字符串缓冲区是可变的。但是当我尝试这个程序时。我很困惑。那么,此程序在这里发生了什么。

class Stringss {
    public static void main(String[] args) {

        String s="hello";
        String ss=new String("xyz");
        System.out.println(ss);
        System.out.println(s);

        s="do";
        ss=new String("hello");
        System.out.println(s);
        System.out.println(ss);
    }
}


输出为

xyz
hello
do
hello

最佳答案

在您的代码中,s不是String对象。它是对String对象的引用。您的代码使它引用了几个不同的String对象。但是String对象本身不会改变。

例如,如果可以的话,字符串将不会是不变的

s.setCharacterAt(3, 'Z');


要么

s.setValue("foo")


但是做

s = "a string";
s = "another string";


不会更改"a string"对象包含的内容。它只是指向另一个String。

打个比方,VHS是可变的。您可以更换乐队的东西。 DVD是不可变的:您无法更改磁盘上写的内容。但这并不妨碍DVD播放器播放几张不同的DVD。将另一张DVD放入DVD播放器不会改变DVD的内容。

关于java - 向我解释字符串是不可变的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19198274/

10-11 19:58