null 和 equals 的对称性

fre*_*low 5 java null symmetric equals nullpointerexception

平等应该是对称的,对吗?

Object someObject = new Object();
Object NULL = null;

NULL.equals(someObject) => NullPointerException
someObject.equals(NULL) => false
Run Code Online (Sandbox Code Playgroud)

不让第二种形式抛出 a的理由是什么NullPointerException

mik*_*era 3

从理论上讲,平等肯定被定义为对称的,但在不存在的对象上也根本没有定义(这就是 null 所代表的)。

因此,任何应用于 null 的行为都同样有效。它可以返回一只活兔子,但仍然不违背平等的理论定义。

在这种情况下,对于 Java 设计者来说,对 null 值调用 equals 应该抛出 NullPointerException 是一个相当合理的实现决策,因为这与对 null 值调用任何其他方法是一致的。