Objects.hashCode()和new Object().hashCode()有什么区别?

3
这两段代码有什么不同?
代码段1:

Snippet 2:

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

代码段2:

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

自1.7版本以来的java.util.Objects。 - 卢声远 Shengyuan Lu
4个回答

8

容忍null值

唯一的区别是,如果o为null,Objects.hashCode(o)返回0,而o.hashCode()会抛出一个NullPointerException


Objects是一个类,其中hashCode是其中的一个静态方法。 - Arjun Rao
@Apurv 请查看此处(自1.7起)。 - Bernhard Barker
@ArjunRao:所以,假设没有null对象,它们就是相同的吗? - MC Emperor
由于Objects.hashCode(o)有额外的逻辑来确定o是否为空,因此不建议使用。如果您确定o不为空,则使用o.hashCode()会稍微更好一些(可以忽略不计)。 - Arjun Rao

4
这是如何实现Objects.hashCode()的方法:
public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}

如果o为空,则Objects.hashCode(o);将返回0,而o.hashCode()将抛出NullPointerException异常。

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

这是一个安全的 NPE 替代 o.hashCode() 的方法,除此之外没有其他区别。

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

它返回一个非空参数的哈希码,对于空参数返回0。在这种情况下,它是由o引用的Object。它不会抛出NullPointerException

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

返回由o引用的Object的hashCode()。如果onull,则会抛出NullPointerException异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接