7

我刚刚在 Effective Java 中读到,equals()方法的第五个原则是所有对象都必须不等于null. 这本书接着说,程序员编写的一些类使用显式测试来防止这种情况null

public boolean equals(Object o){
    if (o == null)
        return false;
    ...
}

根据 Effective Java,上述非空测试是不必要的。但是,我的问题是,为什么这么多程序员要测试这个非空性要求呢?

4

5 回答 5

8

您可以通过instanceof测试来做到这一点:

public boolean equals(Object o){
    if (!(o instanceof MyObject))
        return false;
    ...
}

null不是任何东西的实例,所以这有效。

于 2013-06-04T08:02:15.710 回答
2
Object firstObject = null;
secondObject.equals(firstObject);

你怎么能防止这种情况?如果您在使用前不检查 null ,那么它将崩溃。我认为您还需要检查类类型,如下所示

        if (other == null || other.getClass() != this.getClass()) {
           return false;
        }
于 2013-06-04T07:59:39.413 回答
0

检查的可能原因:

其他语言的旧习惯

不熟悉你说的原理

可能抛出空指针异常的库(你不能保证其他人没有做过愚蠢的事情!)

如果您有一些嵌套命令只需要针对对象的非空实例进行评估,您可能想要绕过

于 2013-06-04T08:10:57.197 回答
0

防止调用NullPointerExceptionwhen 。equals()

于 2013-06-04T08:01:38.863 回答
0

行业中建议了许多做法,以避免代码中不必要的检查或陷阱,但事实上可能会发生错误或可能存在无法控制的情况,例如来自某些第三方系统的数据缺少系统所期望的值,因此需要检查。世界并不完美!!

于 2013-06-04T08:13:12.600 回答