【发布时间】:2014-02-07 22:04:54
【问题描述】:
我听说执行String s = new String("lol"); 时会创建两个对象。为字符串常量池创建一个对象,在堆上为s 创建一个对象。
那么,当我们执行以下操作时,是否创建了 2 个对象? String s = "lol";对象创建一样吗?
编辑:
创建了多少对象:
String s1 = new String("lol1");
还有多少:
String s2 = "lol2";
【问题讨论】:
-
实际上,常量池中的“lol”是在任何类中加载该值的第一个字符串文字时创建的——可能是 10 分钟前加载的类。并且简单地将对象引用值分配给对象引用变量不会创建任何对象。
-
没有。一个是文字值,一个是对象。
-
@AlexJohnson - 字符串文字是一个对象。
-
@HotLicks 实际上,这就是为什么在 Java 获得像 C# 的
??这样的空合并运算符之前,"expectedValue".equals(someStringVariableThatMayBeNull)在现实世界中是一个非常有用的构造。 :)