String s2=new String("immutable");
System.out.println(s2.replace("able","ability"));
s2.replace("able", "abled");
System.out.println(s2);
在第一个印刷声明中,它正在打印不变性,但它是不可变的吗?为什么这样? 和 在下一个打印声明中,它不会被替换>任何答案都欢迎..
答案 0 :(得分:6)
System.out.println(s2.replace("able","ability"));
在上面的行中,返回并打印了一个新字符串。
返回一个新字符串,该字符串是用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.