Objects的hash()和hashCode()比较

Objects类是Java jdk 1.7开始引入的

This class consists of static utility methods for operating on objects. These utilities include 

null-safe or null-tolerant methods for computing the hash code of an object, returning a 

string for an object, and comparing two objects.

翻译成中文:

这个类包括用于操作对象的静态实用方法。这些工具包括用于计算对象的哈希代码的空安全

或空容错方法,返回一个对象的字符串,并比较两个对象。

下面是一个示例:

public class HelloWord{
	public static void main(String[] args) {
		System.out.println("a".hashCode());
		System.out.println(Objects.hashCode("a"));
		System.out.println(Objects.hash("a"));
	}
}
输出结果:97
          97
          128

由此可见:前两个都是直接计算ahashCode()编码的,而第三个确实得出不一样的结果,通过查看源码可以发现:

Objects类中的hash()函数是这样定义的

public static int hash(Object... values) {
    return Arrays.hashCode(values);
}

这里调用Arrays类的hashCode()函数

public static int hashCode(Object a[]) {
    if (a == null)
        return 0;
    int result = 1;
    for (Object element : a)
        result = 31 * result + (element == null ? 0 : element.hashCode());
        return result;
}

由该源码可以看出,当a不为空的时候,hash()执行的流程是

31*1+a.hashCode(); 即在a的hash值上加上31,所以输出结果是31+97=128.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值