s2和s3的值为“ ab”,并且此字符串存储在字符串池中。 根据文档s2 == s3应该返回true,但是返回false。 为什么?
rate
答案 0 :(得分:1)
根据Java语言规范§15.18.1
15.18.1字符串连接运算符
+
如果只有一个操作数表达式的类型为String,则为string 对另一个操作数执行转换(第5.1.11节)以产生一个 运行时输入字符串。
字符串连接的结果是对String对象的引用 这是两个操作数字符串的串联。那些角色 左操作数的放在右字符之前 新创建的字符串中的操作数。
+
将始终产生新的字符串,除非表达式为常量。常量表达式的一个示例是"a" + "b"
。您的表达式不是常量,因为它包含非最终变量。
在第12.5节中更清楚地说明了这一点:
执行不是一个字符串连接运算符+(§15.18.1) 常量表达式(§15.28)的一部分始终创建一个新的String 对象代表结果。
答案 1 :(得分:-1)
确保s2和s3都等于"ab"
。
并确保"ab"
字符串进入字符串池,因为在代码中已将该字符串作为文字。这也意味着s3是从字符串池中提取的,因为您要为其分配上述文字。
但是您为什么认为s + s1
会将结果字符串从字符串池中拉出?不会。