7

equals()私はEffective Javaで、メソッドの5番目の原則は、すべてのオブジェクトが等しくない必要があるということを読んだばかりnullです。この本は、プログラマーによって書かれたいくつかのクラスは、明示的なテストを使用してこれを防御していると述べていますnull

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

Effective Java によれば、上記の not null テストは不要です。しかし、私の質問は、なぜ多くのプログラマーがこの無効でない要件をテストするのでしょうか?

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

NullPointerExceptionequals()呼び出されるのを防ぐため。

于 2013-06-04T08:01:38.863 に答える