我在想java中的字符串.字符串是不可变的.但是当代码是可变的时候
String str = new String("abc"); System.out.println(str.toUpperCase()); System.out.println(str);
外出是
ABC abc
实际上输出应该是
ABC ABC
因为String是不可变的.请解释.谢谢!
不,输出正是因为字符串是不可变的.调用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 } }