java中的不可变字符串

时间:2013-09-19 06:39:24

标签: java string

我有基本的困惑。

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

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

6 个答案:

答案 0 :(得分: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"));

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

答案 1 :(得分:3)

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

答案 2 :(得分: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);

会给你同样的外出......

答案 3 :(得分:1)

让我们看看第2行:

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

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

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

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

System.out.println(tempStr);

但在第三个声明中,

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

没有对另一个变量的赋值,因此返回一个字符串但未分配给任何变量。因此输了,但s2保持不变。

答案 4 :(得分:0)

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

您的代码s2.replace("able","ability"),它返回一个新字符串,s2没有任何结果。

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

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

另见

答案 5 :(得分:0)

String s2=new String("immutable");

1)当我们创建一个如上所述的String时,会创建一个新对象。如果我们尝试修改它,则会使用我们提供的内容创建一个新对象,并且不会修改我们的String 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.