08. Equality

Kotlin distinguishes two kinds of equality. Structural equality == calls equals and compares content. Referential equality === checks whether two references point to the same instance.

data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)   // different instance, same content
    val c = a             // same instance as a

    // == compares content (data classes generate equals)
    println(a == b)       // true
    // === compares identity
    println(a === b)      // false

    // c refers to the very same object as a
    println(a === c)      // true

    // Strings work the same way
    val s1 = StringBuilder("hi").toString()
    val s2 = StringBuilder("hi").toString()
    println(s1 == s2)     // true: same characters
    println(s1 === s2)    // false: distinct String objects
}

Running it:

$ kotlin run
true
false
true
true
false
← Prev Index Next →