文字列は不変ですが、値の同等性と参照の同等性は、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
?