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