[英]In Java, Strings are immutable, so what exactly happens when do this?
String s;
/*code*/
s = "foo";
由于空字符串无法更改,是否正在创建一个全新的对象?
这个:
String s;
不会创建“空字符串”,而只是一个未初始化的变量。
这个:
s = "foo";
设置该变量以引用String
对象。 这是不可变的对象,而不是变量。
您需要了解变量和对象之间的区别。
考虑以下代码:
String x = "hello";
for (int i = 0; i < 10; i++) {
x = x + i;
}
最终将创建11个字符串对象 ,但是只涉及两个变量 ( x
和i
)。 在任何时候, i
的值都是整数(0-10),而x
的值是对String
的引用。 (它也可以为null
,但在此示例中并非如此。)
重要的是要了解x
不是对象, x
的值也不是对象。
如果可以从物理角度考虑它,请考虑在纸上写上我的家庭住址:
纸和地址都不是房子本身。 如果将地址擦在纸上然后改写一个不同的地址,那不会对我的房子做任何更改-就像更改x
的值不会对我的示例代码中的字符串对象本身做任何更改一样。
s
当前根本没有分配任何东西。
但是,如果您已定义了String s = "";
然后s = "foo";
,则不会更改空字符串,但会将变量s
更改为引用字符串"foo"
而不是空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.