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

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

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.

————————————————
版权声明:本文为CSDN博主「自由自在_Yu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yuxiangaaaaa/article/details/53082932

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值