2 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
眼眸繁星
TA贡献1873条经验 获得超9个赞
您部分正确,如果表达式不是常量表达式,+
运算符将创建一个新String
对象。
根据 Java 语言规范第 15.18.1 节,
(强调我的)
§15.18.1 字符串连接运算符
+
如果只有一个操作数表达式的类型为
String
,则在运行时对另一个操作数执行字符串转换(第 5.1.11 节)以生成字符串。字符串连接的结果是对 String 对象的引用,该对象是两个操作数字符串的连接。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。
String 对象是新创建的(第 12.5 节),除非表达式是常量表达式(第 15.28 节)。
通过常量表达式,它的意思是这样的:
"a" + "b" // this will always evaluate to "ab", so it's constant.
或者
a + b
wherea
和b
被声明final
。
有关详细信息,请参阅第15.28 节。
![?](http://img1.sycdn.imooc.com/5458477300014deb02200220-100-100.jpg)
临摹微笑
TA贡献1982条经验 获得超2个赞
它创建新字符串,因为您正在连接对象实例。
如果要使用字符串池中已经存在的字符串,则应与常量表达式连接。
在您的情况下,如果您希望 a==b 为真,则应使用实习生,如下所示:
String b= (s + "a").intern();
System.out.println(b==a);
或者您可以使用常量表达式:
String b= "s" + "a"
System.out.println(b==a);
它也打印真
添加回答
举报
0/150
提交
取消