相等比较
Kotlin 有两种类型的相等比较:
- 引用相等(Referential equality)- 指向同一个对象
- 结构相等(Structural equality)- 通过
equals()来检查
结构相等
结构相等通过 == 操作符来判断(否定形式是 !=)。按照惯例,像 a == b 这样的表达式会被转换成:
a?.equals(b) ?: (b === null)
如果 a 不为 null,equals(Any?) 会被调用,否则(a 是 null)会检查 b 跟 null 是否是引用相等。
注意,当与 null 做显示对比时优化代码没有意义,因为 a == null 会被自动转换成 a === null。
浮点数相等
当相等比较的操作数确定是 Float 或者 Double 类型时(可为空),比较操作遵循浮点运算的 IEEE 754 标准。
否则使用结构相等,这种方式与规范不符,因为 NaN 等于它自己,-0.0 不等于 0.0。
引用相等
引用相等通过 === 操作来判断(否定形式是 !==)。a === b 为 true 的唯一条件是 a 和 b 指向同一个对象。