如果我使用方法替换,为什么需要重新定义String?

时间:2014-07-15 00:19:51

标签: java string replace

如果我在此代码中使用方法替换,为什么需要重新定义变量theString

String theString = "I w@nt to h@ve the regul@r \"A\"!";
theString = theString.replace("@", "a");
System.out.println(theString);

为什么我不能这样做:

theString.replace("@", "a");

那就是它?

4 个答案:

答案 0 :(得分:7)

字符串是不可变的 - 一旦创建它们就无法更改它们。当然也有例外,如果你使用反射魔法,但在大多数情况下,它们应该被视为不变量。因此,方法replace(...)不会更改字符串,它不能,而是创建并返回 new 字符串 。因此,为了能够使用新的String,您必须访问其引用,这可以通过将其分配给String变量甚至是原始的String变量来完成。这个讨论深入探讨了对象引用变量之间的区别。

答案 1 :(得分:3)

因为String对象在设计上是不可变的,所以你需要创建一个新的String来包含你的更改

答案 2 :(得分:3)

发布的答案提到了技术原因(字符串是不可变的)但忽略了为什么会这样。请参阅:Why are strings immutable in many programming languages?

答案 3 :(得分:1)

取自link

在Java中,String不像其他编程语言那样实现为字符数组。相反,string是作为String类的实例实现的。

字符串是常量/不可变的,它们的值在创建后无法更改。如果执行导致更改字符串的任何操作,则会创建并返回String对象的新实例。这种方法是为了实现Java的实现效率。

当需要对String执行许多更改时,建议使用StringBuffer或StringBuilder。 StringBuffer类似于String但可以修改。 StringBuffer是线程安全的,并且所有方法都是同步的。 StringBuilder等同于StringBuffer,供单线程使用。由于方法不同步,因此速度更快。