作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读了很多关于字符串对象是不可变的,只有字符串缓冲区是可变的。但是当我尝试这个程序时。我很困惑。那么这个程序中发生了什么。
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 对象本身并没有改变。
例如,如果可以的话,字符串将不会是不可变的
s.setCharacterAt(3, 'Z');
或
s.setValue("foo")
但是做
s = "a string";
s = "another string";
不改变“a string”
对象包含的内容。它只是让 s 指向另一个字符串。
打个比方,VHS 是可变的。你可以更换乐队上的东西。 DVD 是不可变的:您无法更改磁盘上写入的内容。但这并不妨碍 DVD 播放器播放多张不同的 DVD。将另一张 DVD 放入 DVD 播放器不会改变 DVD 的内容。
关于java - 向我解释字符串是不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198274/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!