为什么不是';在Java中,字符串值在String.Replace之后是否更改?

为什么不是';在Java中,字符串值在String.Replace之后是否更改?,java,string,Java,String,我对下面的程序有一个问题 请看下面的节目 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); } } 我所期望的是,一旦我运行这个程序,我会认为put

我对下面的程序有一个问题

请看下面的节目

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是最好的,但令我惊讶的是,输出是测试

谁能告诉我,为什么会这样


提前感谢。

字符串在Java中是不可变的,这意味着您不能更改它们。调用replace方法时,实际上是在创建一个新字符串

您可以执行以下操作:

String str = "Test";
str = str.replace('T', 'B');

这是重新分配。

String.replace
不会更改字符串内容,但会返回替换结果。 您应该执行以下操作

str = str.replace('T', 'B');

Java中的字符串是不可变的-它们不能更改。当您使用str.replace之类的函数时,它不会就地更改字符串,而是返回一个新的字符串对象,其中包含您请求对其进行的更改。下文对此进行了解释:

返回一个新字符串,该字符串由newChar替换该字符串中所有出现的oldChar生成


作为将来的参考,Java文档非常全面,详细解释了方法期望的参数、返回的参数以及它们有哪些副作用(如果有)。

String类是不可变的。因此,对字符串对象执行的任何操作都将返回一个新的字符串对象


您必须将
replace
操作的结果分配给字符串变量,以便获得结果。

除上述答案外,如果要广泛修改(添加/删除)数据,最好使用StringBuffer(线程安全)或StringBuilder(非线程安全)完成修改后将其强制转换为字符串(&C)

String
对象在java中是不可变的,即每当对
String
进行修改而不是修改时,就会在内存中创建一个新的
String
对象

方法
str.replace('T','B')
在堆内存中创建了一个新的
String
对象,但该对象未被任何字符串变量引用。要引用该对象,必须将其分配给
字符串
变量:

str = str.replace('T', 'B');

谢谢你的解释,为什么会改变呢?请在为该反问题提供案例时使用以提供支持信息。(许多“为什么不”的问题可以通过查看“为什么做/如何做”来回答或细化。)