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