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

uty*_*ybo 1 java string replace

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

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

为什么我不能这样做:

theString.replace("@", "a");
Run Code Online (Sandbox Code Playgroud)

那就是它?

Hov*_*els 7

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