2.4 改进的相等性检查

与Java一样,Kotlin也有两种类型的相等性检查:

□Java中的equals()方法,或者Kotlin中的==运算符,是值的比较,称为结构相等。

□Java中的==运算符,或者Kotlin中的===,是引用的比较,称为引用相等。引用相等比较引用,如果两个引用是相同的,则返回true——即它们引用完全相同的实例。Kotlin中的运算符===与Java中的==运算符是直接等价的。

但是Kotlin中的结构相等运算符==比Java中的equals()方法更好。如果你执行str1.equals(str2),那么在Java中,如果引用str1为null,你可能会遇到NullPointer-Exception。但在Kotlin中使用==时不是这样。

Kotlin的结构相等运算符可以安全地处理空引用。让我们用一个例子来检验一下:

如果在Java中使用equals()进行这些比较,那么最终结果将是运行时Null-PointerException,但是Kotlin可以安全地处理这些null。如果两个引用中的值相等,则结果为true,否则为false。如果一个或另外一个引用是null,但不是同时为null,那么结果为false。如果两个引用都为null,则比较的结果为true。我们可以在输出中看到这一点,但你也会看到一个额外的好处:

输出确认了前面提到的==运算符的行为。输出还显示了Kotlin合理警告的另一个示例——如果比较的结果总是一个期望值,那么它会提示一个警告,建议我们修复代码以删除多余的条件检查。

当在Kotlin中使用==时,它会执行null检查,然后对对象调用equals()方法。

你已经了解了在Java中使用equals()和在Kotlin中使用==之间的区别。接下来,让我们看看如何轻松地使用嵌入表达式创建字符串。