3

これら 2 つのコード スニペットの違いは何ですか?

スニペット 1:

Object o = new Object();
int i = Objects.hashCode(o);

スニペット 2:

Object o = new Object();
int i = o.hashCode();
4

4 に答える 4

8

null 値を許容

唯一の違いは、 o が null の場合Objects.hashCode(o)は 0 を返すのに対しo.hashCode()、 a をスローすることNullPointerExceptionです。

于 2013-04-24T08:49:12.357 に答える
4

Objects.hashCode()実装方法は次のとおりです。

public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}

の場合onullObjects.hashCode(o);返しますが0o.hashCode()をスローしNullPointerExceptionます。

于 2013-04-24T08:50:31.927 に答える
2
java.util.Objects {
    public static int hashCode(Object o) {
        return o != null ? o.hashCode() : 0;
    }
}

これは、o.hashCode() の NPE セーフな代替手段です。

それ以外の違いはありません。

于 2013-04-24T08:51:20.883 に答える
0
Object o = new Object();
int i = Objects.hashCode(o);

null 以外の引数のハッシュ コードを返し、null 引数の場合は 0 を返します。この場合は でObject参照されます。oスローしませんNullPointerException

Object o = new Object();
int i = o.hashCode();

Objectによって参照された の hashCode() を返しますo。の場合、onull得られますNullPointerException

于 2013-04-24T08:51:36.420 に答える