Sit*_*nsu -1 java string heap stack immutability
有人能回答我吗?
public class ReplaceString{
public static void main(String arg[]) {
String a = "Hariom";
a = a.replace('H', 'b');
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
A String是不可变的,这意味着您无法更改同一地址上的字符串值.如果更改它,它将创建一个新对象,您必须将其分配给当前字符串对象.例如,
String a = "Hariom";
a.replace('H', 'b');
System.out.println(a); //will print "Hariom"
Run Code Online (Sandbox Code Playgroud)
因为a没有改变.相反,您String使用值在内存中创建了一个新的bariom并显示更改为a,您必须将新创建的字符串指向a,即
a= a.replace('H', 'b');
Run Code Online (Sandbox Code Playgroud)
也许这会更清楚一些:
第1步:String a = "Hariom";在内存中创建一个新字符串,变量a指向它.

第2步:a.replace('H', 'b');如果替换了某个字符String a,String则在堆中创建一个new ,没有指向它的变量.

第3步: a= a.replace('H', 'b');如果调用replace()并将其分配给变量a,那么会String bariom在堆中创建new .然后将其分配给a导致a指向新的String.

将您的代码更改为:
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
}
Run Code Online (Sandbox Code Playgroud)
b并且a是不同的对象.immutable表示您无法修改该对象.
注意:反射可用于打破字符串的不变性.
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |