可能重复:
String的优点是什么?
字符串是不可改变的?
String s = "PROJECT";
Run Code Online (Sandbox Code Playgroud)
这里s不能修改.但是String s2=s.toLowerCase()会给我一个新的字符串.在这里,我仍然可以获得原始字符串的新副本!但是如果Java仍然需要不变性,那么为什么不在修改字符串时限制用户(抛出异常或其他东西).那为什么不变吗?任何人都可以解释原因吗?
有一点误解:
s不是一成不变的.s可以很容易地为其分配一个新值(即另一个 String对象的另一个refence ),除非它是final.
并且只是因为一个String实例是不可变的并不意味着你不能创建另一个 String从第一个String实例派生它的值但是略有不同.
实际上,这是您在Java中"修改"字符串的唯一方法:您不能更改任何给定String对象的内容,但您可以创建具有已修改内容的副本(该副本再次是不可变的!).