我在想java中的string。字符串是不可变的。但是当代码是可变的时
String str = new String("abc");
System.out.println(str.toUpperCase());
System.out.println(str);
输出结果是
ABC
abc
实际上,输出应该是
ABC
ABC
因为字符串是不可变的。请解释一下。谢谢!
发布于 2015-12-11 18:04:59
不,输出就是这样,因为字符串是不可变的。调用toUpperCase()
不会更改现有字符串的内容,它会创建一个新字符串并返回对该字符串的引用...它必须这样做,因为字符串是不可变的。
这不仅仅是toUpperCase()
的情况-- String
上所有听起来可能会修改字符串的方法(例如trim()
)实际上都会返回一个新的字符串。
将其与可变类StringBuilder
进行比较,在可变类中,对象被修改并返回对this
的引用:
public class Test {
public static void main(String[] args) throws Exception {
StringBuilder builder = new StringBuilder("abc");
System.out.println(builder); // abc
System.out.println(builder.append("def")); // abcdef
System.out.println(builder); // abcdef
}
}
https://stackoverflow.com/questions/34220717
复制相似问题