文字列は不変ですが、値の同等性と参照の同等性は、Scalaのjava.lang.Stringオブジェクトでは同じではないと予想されます。これは、2つの文字列保持valが、それらの文字列が同一であっても、参照が等しくないようにする必要があることを意味します。しかし、2.9.1.finalREPLで得られるものは次のとおりです。
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かjava.lang.String?