有人可以回答我吗?
public class ReplaceString{
public static void main(String arg[]) {
String a = "Hariom";
a = a.replace('H', 'b');
System.out.println(a);
}
}
答案 0 :(得分:8)
String
是不可变的,这意味着您无法更改同一地址上的字符串值。如果更改它,它将创建一个新对象,您必须将其分配给当前字符串对象。例如,
String a = "Hariom";
a.replace('H', 'b');
System.out.println(a); //will print "Hariom"
因为a
未更改。相反,您在内存中创建了一个值为String
的新bariom
,并显示对a
的更改,您必须将新创建的字符串指向a
,即< / p>
a= a.replace('H', 'b');
也许这会更清楚一点:
第1步:String a = "Hariom";
您在内存中创建了一个新字符串,变量a
指向它。
第2步:a.replace('H', 'b');
如果您替换String
a
中的某个字符,则会在堆中创建一个新的String
,但没有变量指着它。
第3步:a= a.replace('H', 'b');
如果您致电replace()
并将其分配给变量a
,那么会发生新的String
{在堆中创建{1}}。然后,您将其分配给bariom
,导致a
指向新的a
。
答案 1 :(得分:6)
将您的代码更改为:
public static void main(String arg[]) {
String a = "Hariom";
String b = a.replace('H', 'b'); // returns a new string instance
System.out.println(a==b); // prints false
}
b
和a
是不同的对象。 immutable
表示您无法修改该对象。
注意: Reflection 可用于打破字符串的不变性。
答案 2 :(得分:4)
a = a.replace('H', 'b');
这不会修改String
a
,它会返回一个新的String
实例(除非没有要替换的内容,在这种情况下原始String
退回)。
答案 3 :(得分:2)
根据Javadocs:
String#replace(char oldChar, char newChar)
方法返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar而得到的
String a = "Hariom";
a = a.replace('H', 'b');
/* method returns new instance of String ("bariom")
and you referencing the new instance to variable a,
so now String object "Hariom" is no longer referenced by any variable
and is available for garbage collection.
*/
System.out.println(a);
答案 4 :(得分:0)
行
a.replace('H', 'b');
生成新字符串。然后将a变量设置为新值。
答案 5 :(得分:0)
a.replace
不会修改a
,它会返回 new String对象。如果您在未重新分配到a.replace
的情况下致电a
,您会发现原始字符串未发生变化。
变量可以包含不可变对象,但您仍然可以重新分配它们。重新分配不会更改对象,它只会更改变量引用的对象。