繁体   English   中英

在Java中,字符串是不可变的,那么什么时候会发生什么呢?

[英]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个字符串对象 ,但是只涉及两个变量xi )。 在任何时候, i都是整数(0-10),而x是对String的引用。 (它也可以为null ,但在此示例中并非如此。)

重要的是要了解x不是对象, x也不是对象。

如果可以从物理角度考虑它,请考虑在纸上写上我的家庭住址:

  • 纸就像变量-它是“可以存储值的地方”。
  • 写在纸上的地址就像参考文献一样-这是查找对象的一种方式
  • 房子本身就像物体。

纸和地址都不是房子本身。 如果将地址擦在纸上然后改写一个不同的地址,那不会对我的房子做任何更改-就像更改x的值不会对我的示例代码中的字符串对象本身做任何更改一样。

s当前根本没有分配任何东西。

但是,如果您已定义了String s = ""; 然后s = "foo"; ,则不会更改空字符串,但会将变量s更改为引用字符串"foo"而不是空字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM