Kotlinの“ ==”と“ ===”演算子の違い

Kotlinの「==」演算子と「===」演算子の違い

1. 概要

この記事では、difference between “==” and “===” operators in Kotlinについて説明します。

Kotlinでは、Javaと同様に、等式の2つの異なる概念、Referential equalityStructural equalityがあります。

2. 参照の平等

参照の同等性のために、オブジェクトの参照を評価できるようにする===記号を使用します(同じオブジェクトを指している場合)。 これは、Javaの「==」演算子に相当します。

2つの整数が定義されているとしましょう。

val a = Integer(10)
val b = Integer(10)

そして、a === bを実行して両方をチェックします。これは、それぞれがメモリ内の異なる場所を指している2つの別個のオブジェクトであるため、falseを返します。

3. 構造的平等

ここで、構造的な同等性のために、両方の値が同じ(または等しい)かどうかを評価する==記号を使用します。 これは通常、Javaでequals()メソッドを実装することによって実現されます。

したがって、同じIntegersの例を使用して、a == bを実行する必要があります。この場合、両方の変数の値が同じであるため、trueが返されます。

4. 複雑なオブジェクトの比較

より複雑なオブジェクトの等価性をチェックする場合、シンボルは同じように動作します。 趣味のリストがあるUserがあるとしましょう。

data class User(val name: String, val age: Int, val hobbies: List)

===は参照の同等性をチェックし、List<>を便利に使用することで、オブジェクトand the data contained on the listをチェックする==演算子を利用できます。

5. 配列の同等性

Kotlin 1.1以降のArrays,の場合、infix関数contentEqualsおよびcontentDeepEqualsを使用して構造の同等性を確認できます。

val hobbies = arrayOf("Hiking, Chess")
val hobbies2 = arrayOf("Hiking, Chess")

assertTrue(hobbies contentEquals hobbies2)

6. 結論

このクイックチュートリアルでは、非常に簡単な例を通じて、referential and structural equality in Kotlinの違いを紹介しました。

いつものように、これらすべての例とスニペットの実装はover on GitHubにあります。

これはMavenベースのプロジェクトであるため、インポートしてそのまま実行するのが簡単であることに注意してください。