在这种情况下,String对象如何是不可变的?

Nil*_*esh 1 java

我同意String对象是不可变的这一事实,意味着它们不能被修改.就像下面的情况一样

String str = "Hi";
String str1 = str.concat("Nilesh");
Run Code Online (Sandbox Code Playgroud)

如果length参数为0或者将创建一个新的String对象并返回其引用,则返回str对象.如果我这样做

String str = "Hi";
str="Hello";
Run Code Online (Sandbox Code Playgroud)

它是如何变化的?不可变的地方在哪里?请举个例子.

ass*_*ias 5

不可变的是String本身,而不是指向String的引用.在你的第二个代码中:

String str = "hi";
str = "hello";
Run Code Online (Sandbox Code Playgroud)

涉及2个String对象:"hi""hello".

str是一个最初指向第一个的引用然后指向赋值后的第二个引用.但是String对象"hi"不会在该代码中被修改.