两个字符串引用都引用相同的字符串,但是在比较时,结果返回false。

时间:2018-06-28 05:52:35

标签: java string

s2和s3的值为“ ab”,并且此字符串存储在字符串池中。 根据文档s2 == s3应该返回true,但是返回false。 为什么?

rate

2 个答案:

答案 0 :(得分:1)

根据Java语言规范§15.18.1

  

15.18.1字符串连接运算符+

     

如果只有一个操作数表达式的类型为String,则为string   对另一个操作数执行转换(第5.1.11节)以产生一个   运行时输入字符串。

     

字符串连接的结果是对String对象的引用   这是两个操作数字符串的串联。那些角色   左操作数的放在右字符之前   新创建的字符串中的操作数。

     

String对象是新创建的 §12.5),除非该表达式是一个常量表达式(§15.28)。

+将始终产生新的字符串,除非表达式为常量。常量表达式的一个示例是"a" + "b"。您的表达式不是常量,因为它包含非最终变量。

在第12.5节中更清楚地说明了这一点:

  

执行不是一个字符串连接运算符+(§15.18.1)   常量表达式(§15.28)的一部分始终创建一个新的String   对象代表结果。

答案 1 :(得分:-1)

确保s2和s3都等于"ab"

并确保"ab"字符串进入字符串池,因为在代码中已将该字符串作为文字。这也意味着s3是从字符串池中提取的,因为您要为其分配上述文字。

但是您为什么认为s + s1会将结果字符串从字符串池中拉出?不会。