我一直在使用JShell来测试它,今天我遇到了相当有趣的行为.
jshell> String a = "A" a ==> "A" jshell> String b = "A" b ==> "A" jshell> a == b $4 ==> true jshell> "A" == "A" $5 ==> true
我首先想知道这是否是Java 9的一个功能,我通过使用Java 9编译和运行该程序来检查它
public class Equus { public static void main(String... args) { String a = "A"; String b = "A"; System.out.println("a == b"); System.out.println(a == b); System.out.println("\"A\" == \"A\""); System.out.println("A" == "A"); } }
有趣的是,我得到了
a == b true "A" == "A" true
作为我的输出也是如此.这里发生了什么?为什么a
和b
彼此相等,为什么是"A" == "A"
真的吗?
为什么不应该呢?此行为也在以前的Java版本中展示 - 字符串文字被实现.
如您所知,==
检查引用相等性 - 两个变量具有相同的内存地址.当一个字符串被实现时,该字符串的所有引用都指向实习池,因此将使用相同的字符串==
.