我对以下程序有疑问
请参阅下面的程序
public class Kiran {
public static void main(String args[]) {
String str = "Test";
str.replace('T', 'B');
System.out.println("The modified string is now " + str);
}
}
我所期待的是,一旦我运行这个程序,我应该看到putput为Best,但令我惊讶的是输出是Test。
请有人告诉我,为什么会这样?
提前致谢。
答案 0 :(得分:13)
String在Java中是不可变的,这意味着您无法更改它们。当您调用replace方法时,实际上是在创建一个新的String。
您可以执行以下操作:
String str = "Test";
str = str.replace('T', 'B');
哪个是重新分配。
答案 1 :(得分:6)
String.replace
不会更改字符串内容,但会返回替换结果。
您应该执行以下操作
str = str.replace('T', 'B');
答案 2 :(得分:2)
Java中的字符串是不可变的 - 它们无法更改。当您使用像str.replace这样的函数时,它不是就地更改字符串,而是返回一个新的String对象,其中包含您请求的更改。这在documentation for String:
中有解释返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar而生成的。
为了将来参考,Java的文档非常全面,并详细解释了方法所期望的参数,返回的内容以及它们具有的副作用(如果有的话)。
答案 3 :(得分:2)
String类是不可变的。因此,您在String对象上执行的任何操作都将返回 new String对象。
您必须将replace
操作的结果分配给String变量,以便获得结果。
答案 4 :(得分:1)
String
对象在java中是不可变的,即只要对String
进行修改而不是修改它,就会在内存中创建一个新的String
对象。
方法str.replace('T', 'B')
在堆内存中创建了一个新的String
对象,但该对象未被任何字符串变量引用。要引用该对象,您必须将其分配给String
变量:
str = str.replace('T', 'B');
答案 5 :(得分:0)
除了上述答案之外,如果您要广泛修改(添加/删除)数据,最好使用StringBuffer(线程安全)或StringBuilder(非线程安全)&完成修改后将其强制转换为String。