Java的String是不可变的吗?
在 Java 中,String
类型是不可变的,也就是说,一旦创建了一个 String
对象,它的值就不能被修改。例如:
String str = "hello";
str = str + " world"; // 创建了一个新的字符串对象
在上面的示例中,第二行代码实际上创建了一个新的字符串对象,而不是修改了原始的
str
对象。然而,有一些方法可以修改字符串的值,例如:
concat(String str)
:将指定的字符串连接到该字符串的末尾。
substring(int beginIndex, int endIndex)
:返回一个新的字符串,它是该字符串的一个子字符串。
replace(char oldChar, char newChar)
:返回一个新的字符串,它是将该字符串中所有出现的oldChar
替换为newChar
后得到的字符串。这些方法并不会直接修改原始的字符串对象,而是返回一个新的字符串对象。
此外,还有一些比较隐晦的方式可以修改字符串对象的值,例如使用反射机制来修改字符串对象的私有字段,或者使用
sun.misc.Unsafe
类等不安全的操作。因此,虽然
String
类型本身是不可变的,但是在某些情况下,字符串的值可能会被修改,因此在编写 Java 代码时,仍需要注意字符串的不可变性。