在 Odersky 的书“Scala 编程”第二版中,第 89 页的第 5.7 节中,“==”运算符解释为:
“如您所见,== 已经过精心设计,因此您在大多数情况下都能得到您想要的相等比较。这是通过一个非常简单的规则完成的:首先检查左侧是否为 null,如果不为 null,则调用equals 方法...由于有自动 null 检查,您不必自己进行检查 (7)"
然后注释“7”:
“自动检查不查看右侧,但任何合理的 equals 方法如果其参数为空,则应返回 false。”
如果空值检查不查看 RHS,我希望 null==anything 总是评估为假......但我尝试了一下,并且 null==null 评估为真。
这本书基于scala 2.8。语言是否在某个时候发生了变化,还是我只是误解了解释?
在我使用的 drools 引擎中, == 被解释为如果 LHS 为空,并且 RHS 不为空,则来自 RHS 的 equals 方法将传递给 LHS。尽管最合理的 equals 方法应该在 null 上返回 false,但我喜欢 drools 引擎处理这个问题的方式。在 SQL 中,我习惯于 null != null。