我有基本的困惑。

String s2=new String("immutable");
System.out.println(s2.replace("able","ability"));
s2.replace("able", "abled");
System.out.println(s2);


在第一个打印语句中,它是打印不可变的,但它是不可变的,对吗?为什么这样?

在下一个印刷声明中,它不会被替换>欢迎任何答案。

最佳答案

System.out.println(s2.replace("able","ability"));


在上面的行中,返回并打印了一个新字符串。

因为String#replce()


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


s2.replace("able", "abled");


它执行replace操作,但不将结果分配回去。因此原始String保持不变。

如果分配结果,则会看到结果。

喜欢

String replacedString = s2.replace("able", "abled");
System.out.println(replacedString );


要么

s2= s2.replace("able", "abled");
System.out.println(s2);


更新:

当你写行

System.out.println(s2.replace("able","ability"));


s2.replace("able","ability")解析并返回String传递给该函数。

09-26 08:42