2

我对以下程序有疑问

请看下面的程序

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。

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

提前致谢 。

4

6 回答 6

13

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

您可以执行以下操作:

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

这是一个重新分配。

于 2012-06-08T15:01:44.040 回答
6

String.replace不改变字符串内容,而是返回替换的结果。您应该改为执行以下操作

str = str.replace('T', 'B');
于 2012-06-08T15:01:52.133 回答
2

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

返回一个新字符串,该字符串是用 newChar 替换此字符串中所有出现的 oldChar 所产生的。

为了将来参考,Java 的文档非常详尽,并详细解释了方法期望的参数、返回的内容以及它们具有的副作用(如果有的话)。

于 2012-06-08T15:02:55.957 回答
2

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

您必须将replace操作的结果分配给一个 String 变量,这样您才能得到结果。

于 2012-06-08T15:02:58.550 回答
1

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

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

str = str.replace('T', 'B');
于 2012-06-08T15:30:03.400 回答
0

除了上述答案之外,如果您要广泛修改(添加/删除)数据,最好使用 StringBuffer(线程安全)或 StringBuilder(非线程安全)并在完成修改后将其转换为 String .

于 2012-06-08T15:13:52.627 回答