Java字符串不可变
我在考虑java中的字符串。字符串是不可变的。但是当代码是可变的
String str = new String("abc");
System.out.println(str.toUpperCase());
System.out.println(str);
结果是
ABC
abc
实际上,输出应该是
ABC
ABC
因为字符串是不可变的。请解释一下。谢谢
你可以在下面搜索框中键入要查询的问题!
我在考虑java中的字符串。字符串是不可变的。但是当代码是可变的
String str = new String("abc");
System.out.println(str.toUpperCase());
System.out.println(str);
结果是
ABC
abc
实际上,输出应该是
ABC
ABC
因为字符串是不可变的。请解释一下。谢谢
# 1 楼答案
不,输出是精确的,因为字符串是不可变的。调用
toUpperCase()
不会更改现有字符串的内容,它会创建一个新字符串并返回对该字符串的引用。。。由于字符串是不可变的,所以它必须这样做这不仅仅是
toUpperCase()
的情况——所有String
上的方法听起来可能会修改字符串(例如trim()
),实际上会返回一个新的字符串将其与可变类
StringBuilder
进行比较,其中对象被修改,并且返回对this
的引用:# 2 楼答案
实际上
返回一个新的
String
对象。因此,您会得到一个大写的字符串作为输出。但是如果您尝试将str
打印到控制台,您会看到它的值从未改变如果你尝试: