1概要
この記事では、Kotlin ** の「==」と「===」演算子の違いについて説明します。
Kotlinには、Javaと同じように、同等の概念が2つあります。つまり、参照同等性
と構造同等性
です。
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<String>)
===
は参照の等価性をチェックし、
List <>
を便利に使用することで、オブジェクト
とリスト
に含まれるデータをチェックする
==
演算子を利用できます。
5等式の配列
Arraysの場合、Kotlin 1.1以降では、
infix
関数https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/content-equals.html[
contentEquals
]およびhttpsを使用して、構造的な等価性を確認できます。//kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/content-deep-equals.html[
contentDeepEquals__]:
val hobbies = arrayOf("Hiking, Chess")
val hobbies2 = arrayOf("Hiking, Chess")
assertTrue(hobbies contentEquals hobbies2)
6. 結論
この簡単なチュートリアルでは、非常に単純な例を通して、Kotlin ** における参照と構造の等価性の違いを紹介しました。
いつものように、これらすべての例とスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/core-kotlin[GitHubで動く]にあります。
これはMavenベースのプロジェクトなので、そのままインポートして実行するのは簡単なはずです。