📜  Kotlin 中的平等评估

📅  最后修改于: 2022-05-13 01:55:15.018000             🧑  作者: Mango

Kotlin 中的平等评估

Kotlin 提供了一个附加功能,可以用两种不同的方式比较特定类型的实例。此功能使 Kotlin 与其他编程语言不同。
两种类型的平等是——

  • 结构平等
  • 参照平等

结构平等——

通过==运算符及其逆!=运算符符检查结构相等性。默认情况下,包含x==y的表达式被转换为该类型的equals()函数调用。

x?.equals(y) ?: (y === null)

声明如果x不等于 null,它调用函数equals(y) ,否则如果x被发现为 null,它将检查y是否在引用上等于 null。
注意 –当 (x == null) 时,它会自动转换为引用相等 (x === null),因此这里不需要代码优化。
因此,要在类型的实例上使用 ==,该类型必须覆盖 equals()函数。对于字符串,结构相等比较内容

参照平等——

Kotlin 中的引用相等性通过===运算符及其逆!==运算符进行检查。仅当类型的两个实例都指向内存中的相同位置时,此相等才返回 true。当用于在运行时转换为原始类型的类型时,=== 检查将转换为 == 检查,!== 检查将转换为 != 检查。
Kotlin 程序展示了结构和引用的平等——

Java
class Square(val side: Int) {
    override fun equals(other: Any?): Boolean {
        if(other is Square){
            return other.side == side
        }
        return false
    }
}
// main function
fun main(args :Array) {
    val square1 = Square(5)
    val square2 = Square(5)
    // structural equality
    if(square1 == square2) {
        println("Two squares are structurally equal")
    }
    // referential equality
    if(square1 !== square2) {
        println("Two squares are not referentially equal")
    }
}


输出:

Two squares are structurally equal
Two squares are not referentially equal