繁体   English   中英

如果使用方法replace,为什么需要重新定义字符串?

[英]Why do I need to redefine a String if I use the method replace?

如果在此代码中使用方法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");

就是这样吗?

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

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

发布的答案提到了技术原因(字符串是不可变的),却忽略了为什么这样做。 参见以下内容: 为什么字符串在许多编程语言中都是不变的?

取自此链接

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

字符串是常量/不可变,创建后不能更改其值。 如果执行了导致更改字符串的任何操作,则会创建并返回String对象的新实例。 通过Java实现此方法以提高实现效率。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM