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