1. 概要
ご存知のように、2つの文字列が同じ文字シーケンスを持っている場合、それらは等しくなります。 この短いチュートリアルでは、ScalaでStringsを比較するためのさまざまなアプローチを紹介します。
2. String ==メソッドを使用した比較
==メソッドを使用して2つのStringを比較する方法を見てみましょう。
val stringOne = "baeldung"
val stringTwo = "baeldung"
assert(stringOne == stringTwo)
ここで、 == メソッドは、stringOneとstringTwoのequalityをチェックし、trueを返します。
または、次のように記述することもできます。
assert(stringOne eq stringTwo)
文字列を==メソッドと比較すると、大きな利点があります。Stringがnullであっても、NullPointerExceptionはスローされません。
val stringOne = "baeldung"
val stringTwo = null
assert(stringOne != stringTwo)
上記のコードは、Boolean値falseを出力します。 内部的には、==メソッドは最初にnull値をチェックし、次に最初のStringオブジェクトのequals()メソッドを呼び出してそれらが等しいかどうかをチェックします。
ただし、 method ==は、大文字と小文字を区別して文字列を比較しません。したがって、 stringOne の値を「Baeldung」に変更すると、は再び false :
val stringOne = "Baeldung"
val stringTwo = "baeldung"
assert(stringOne != stringTwo)
このような状況で、大文字と小文字を区別しない比較を行う場合は、 String の両方を大文字または小文字に変換してから、次のように比較できます。
assert(stringOne.toUpperCase() == stringTwo.toUpperCase())
最後に、 null String でこのようなメソッドを呼び出すと、NullPointerExceptionがスローされることにも注意してください。
3. String equals()メソッドを使用した比較
Stringクラスのequals()メソッドを使用して、2つのStringが等しいかどうかを確認できます。
assert(stringOne.equals(stringTwo))
ただし、2つの String の大文字と小文字が異なる場合、上記のアサーションは失敗します。
このような場合、 equalsIgnoreCase()メソッドを使用できます。
assert(stringOne.equalsIgnoreCase(stringTwo))
最も重要なこと、 equals()メソッドを呼び出す文字列がnullでないことを確認する必要があります。 それ以外の場合は、NullPointerExceptionがスローされます。
4. 平等:Scalaと Java
平等の概念は、JavaとScalaで異なって定義されています。 Javaには、基本的に2つの方法で同等性を評価します。参照の同等性を厳密にチェックする == 演算子と、オーバーライドされた場合にオブジェクトの内容をチェックする equals()メソッドです。
逆に、Scalaのでは、==メソッドは任意のタイプを自然に比較するために予約されています。これは、同じオブジェクトを参照する場合、 x ==yがtrueであることを意味します。 続いて、 x == y も、同じプリミティブ値を保持している場合はtrueになります。
さらに、 ==は、クラスAnyで定義された最後のメソッドです。これは、Scalaではeqと記述されています。
Scalaで参照を比較する場合、 ==メソッドはequals()と同じように動作します。 ただし、定義したクラスでequals()の動作をオーバーライドすることで、いつでもequals()の動作を変更できます。ただし、 final であるため、==をオーバーライドすることはできません。方法。
5. 結論
この記事では、 ==メソッドとequals()メソッドを使用して2つのStringを比較する方法について説明しました。 また、大文字と小文字を区別しない比較を行う方法についても説明しました。
いつものように、例の完全なソースコードは、GitHubのにあります。