Scalaの2つの文字列を比較したい。例えば、
私の文字列は次のとおりです。
scala Java
scala Java c++
scala c++
文字列を比較したい
"scala c ++"各文字列で
結果は、
scala c++ = scala Java // false
scala c++ = scala Java c++ // false
scala c++ = scala c++ // true
Scalaでは、平等に==
を使用できます
scala> "scala c++" == "scala Java"
res0: Boolean = false
scala> "scala c++" == "scala Java c++"
res1: Boolean = false
scala> "scala c++" == "scala c++"
res2: Boolean = true
==メソッドはAnyRefクラスで定義されています。メソッドは最初にnull値をチェックしてから、最初のオブジェクトでequalsメソッドを呼び出して2つのオブジェクトが等しいかどうかを確認するため、特別なnullチェックを行う必要はありません。
"test" == null
res0: Boolean = false
Scalaスタートガイド および strings をご覧ください。
「 Scala Programming Language Second Edition]の概要 」から
「値間の等価演算 == は、型の表現に対して透過的であるように設計されています。値型の場合、自然(数値またはブール)の等価です。参照型の場合、 == は、 Java.lang.Object の equals メソッドのエイリアスとして扱われますこのメソッドはもともと参照の等価性として定義されていますが、これらのサブクラスの等価性の自然な概念を実装するためにサブクラスでオーバーライドされることを意図しています。対照的に、Javaでは、==は常に参照型の参照の等価性を意味します。これは実装するのが少し効率的ですが、ボックス化された値が等しいため深刻な一貫性の問題も持ち込みます。 ==に関してはもはや等しくないかもしれません。いくつかの状況は、ユーザー定義の平等の代わりに参照の平等を必要とします。例は、効率が最重要であるハッシュコンシングです。これらの場合、クラス AnyRef は、追加の eq メソッドを定義します。これはオーバーライドできず、参照等価として実装されます(つまり、次のように動作します) == in Java in reference types)。」