【Java基础面试题02】equals、hashcode相关

1 == 和 equals 的区别是什么?

  • == 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;
  •  equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

2 hashcode的取值范围?

Integer.MIN_VALUE 至Integer.MAX_VALUE

hashcode的取值范围在32以上编译器为 -231 到 231-1

3 为什么先比较hashcode 然后在比较equals

hashcode是利用内存地址计算出来的,时间复杂度O(1)

  • hashcode相等的两个对象不一定是一个对象,此时仍然需要继续比较equals
  • hashcode不相等的两个对象肯定不是一个对象 ,此时就不需要再比较equals

4 为什么不能只重写equals方法?


为了保证equals方法返回true的两个对象是同一个对象。

如果只重写了equals方法而没有重写hashcode方法,就会出现equals相等的两个对象,hashcode却不相等的情况,这违反了hashcode的定义。重写hashcode方法就是为了避免这种情况的出现。

 

 

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/interview/interview-javase/1964/equals_hashcode/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录