人们会期望,即使字符串是不可变的,对于 Scala 中的 java.lang.String 对象,值相等和引用相等也不相同。这意味着两个 string-holding val
s 不应该是引用相等的,即使它们的字符串相同。但这是我在 2.9.1.final REPL 中得到的:
scala> val s1 = "a"; val s2 = "a"
s1: java.lang.String = a
s2: java.lang.String = a
scala> s1 eq s2
res0: Boolean = true
知道为什么结果不是false
吗?List("a")
与而不是"a"
按预期进行的相同实验。该eq
方法在AnyRef中被标记为 final 。有没有专门为String
or完成的编译器魔法java.lang.String
?