Можно было бы ожидать, что хотя строки неизменяемы, равенство значений и равенство ссылок не будут одинаковыми для объектов java.lang.String в Scala. Это означает, что два val
, содержащих строки, не должны быть равны по ссылке, даже если их строки идентичны. Но вот что я получаю в 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. Есть ли какая-то магия компилятора, сделанная специально для String
или java.lang.String
?