use*_*612 1 java string immutability
我读了很多字符串对象是不可变的,只有字符串缓冲区是可变的.但是当我尝试这个程序时.我很迷惑.所以这个计划到底发生了什么.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
xyz
hello
do
hello
Run Code Online (Sandbox Code Playgroud)
在您的代码中,s不是String对象.它是对 String对象的引用.您的代码使它引用了几个不同的String对象.但String对象本身不会改变.
例如,如果可以的话,字符串将不是不可变的
s.setCharacterAt(3, 'Z');
Run Code Online (Sandbox Code Playgroud)
要么
s.setValue("foo")
Run Code Online (Sandbox Code Playgroud)
但是这样做
s = "a string";
s = "another string";
Run Code Online (Sandbox Code Playgroud)
不会更改"a string"对象包含的内容.它只是指向另一个String.
作为类比,VHS是可变的.你可以替换乐队的内容.DVD是不可变的:您无法更改磁盘上正在写入的内容.但这并不妨碍DVD播放机播放几种不同的DVD.将另一张DVD放入DVD播放机内并不会改变DVD所包含的内容.
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |