str.replaceAll() 和 str = str.replaceAll() 的区别

dev*_*1ce -3 java string replace

之间有什么区别

str.replaceAll(); //1
Run Code Online (Sandbox Code Playgroud)

str = str.replaceAll(); //2
Run Code Online (Sandbox Code Playgroud)

当我尝试第一个时,编译器没有给出错误,但字符串根本没有改变,但第二个工作正常。第一个是做什么的?示例代码如下:

    String str = "abcdefgh";
    str.replaceAll("abcd", ""); //1st replacement
    System.out.println(str);
    str = str.replaceAll("abcd", ""); //2nd replacement
    System.out.println(str); 
Run Code Online (Sandbox Code Playgroud)

第一个之后的输出是

abcdefgh
Run Code Online (Sandbox Code Playgroud)

在第二个之后是

efgh
Run Code Online (Sandbox Code Playgroud)

我知道我们应该使用第二个,因为它更新但仍然不是 String 对象?我们就像为它调用 replaceAll() 方法,它应该改变它,但为什么不呢?任何想法将不胜感激。

Era*_*ran 5

str.replaceAll("abcd", "")不修改 source String,因为Strings 是不可变的。相反,它会创建一个新的String并返回它。这就是您必须将返回的分配Stringstr.