0

我有基本的困惑。

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

在第一个打印语句中,它打印的是不可变性,但它是不可变的,对吗?为什么这样?并且在下一个打印声明中它不会被替换>欢迎任何答案..

4

6 回答 6

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

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

因为String#replce()

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

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

它执行replace 操作但没有将结果分配回来。因此原始字符串保持不变。

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

喜欢

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"));

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

于 2013-09-19T06:40:48.617 回答
3

replace(String,String)方法返回一个新字符串。第二次调用replace()返回替换,但您没有将其分配给任何东西,然后当您s2再次打印出不可变时,您会看到未更改的值。

于 2013-09-19T06:40:49.447 回答
2

String#replace返回结果String而不修改原始(不可变)String值...

例如,如果将结果分配给另一个String,您将得到相同的结果

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

会给你同样的输出...

于 2013-09-19T06:40:40.993 回答
1

让我们看看第 2 行:

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

这将打印不变性,这是因为

s2.replace("able","ability")

将返回另一个字符串,其输入如下:

System.out.println(tempStr);

但在第三个声明中,

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

没有分配给另一个变量,所以返回一个字符串但没有分配给任何变量。因此丢失,但 s2 保持原样。

于 2013-09-19T06:43:40.270 回答
0

Immutable objects are simply objects whose state (the object's data) cannot change after construction

您的代码s2.replace("able","ability"),它返回一个新的字符串,并没有发生任何事情s2

而且因为replace函数返回一个新的字符串,所以你可以打印结果System.out.println(s2.replace("able","ability"));

String 是不可变的,但 String 有很多方法可以用作Rvalue

另见

于 2013-09-19T06:58:44.127 回答
0

String s2=new String("immutable");

1)当我们像上面那样创建一个字符串时,会创建一个新对象。如果我们尝试修改它,则会使用我们提供的内容创建一个新对象,并且我们的字符串 s2 不会被修改。

2)如果我们需要s2对象中的修改值,那么将上面的代码替换为..

String s2=new String("immutable");//Creates a new object with content 'immutable'
System.out.println(s2.replace("able","ability"));//creates a new object with new content as //immutability
s2=s2.replace("able", "abled");//Here also it creates a new object,Since we are assigning it //to s2,s2 will be pointing to newly created object.
System.out.println(s2);//prints the s2 String value.
于 2013-09-19T07:04:47.170 回答