默认情况

- 双等号==,比较的是内存地址。
- equals(),默认比较的是内存地址。
- hashCode(),默认返回的是object的内存地址。

String中方法改写的情况

经常会遇到需要override equals()和hashCode()的情况,比如String就改写了这两个方法。
 
String equals() 的实现是首先判断两个字符串内存空间是否一致,然后对每一位字符进行比较。
String hashCode() 的实现是对每一位字符*31然后累加。

Equals()和HashCode()的契约

Java中两者有一个契约:
- 如果两个对象相等的话,即equals()返回true的时候,它们的hashCode()必须相等。
- 但如果两个对象的hashCode()相等的话,这两个对象(用equals()判断)不一定相等。
 
举例来说,在HashMap中存取键值对的时候用到了这两个方法:
- 用hashCode()计算Entry在数组中的位置
- 可能出现碰撞的情况,即多个Entry的hash code相同,存在同一个”格”中
- 这时,需要用equals()来判断key是否相同
 
一般来说equals()和hashCode()的override都是绑定出现的,因为要保证上述的契约关系。

参考

最新文章

  1. Egret3D 研究报告(一)初试
  2. Java中GC的工作原理
  3. 【CodeVS】 p1225 八数码难题
  4. 20145320 《Java程序设计》第七周学习总结
  5. poj 1185 炮兵阵地(三维状态压缩dP)
  6. cocos2d-x lua 触摸事件
  7. asp.net session容易丢失解决方案
  8. Python之路,Day20 - 分布式监控系统开发
  9. 基于vue2.0的一个分页组件
  10. Android Mediaplayer 调用release()的时候ANR
  11. 旋转关节(Revolute Joint)
  12. LVS工作模式与调度算法
  13. uImage和zImage的区别
  14. Visual studio中编译和使用libpng和zlib
  15. [Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子
  16. Spring Cloud集成EDAS(替代Eureka)
  17. 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
  18. mysql如何修改root用户的密码
  19. 【转】Android四大基本组件介绍与生命周期
  20. 进程表/文件表/inode/vnode

热门文章

  1. Java DecimalFormat 用法
  2. windows搭建web服务器
  3. filezilla server客户端FTP连接不上解决
  4. hexo博客简易搭建教程
  5. 版本工具:truck tag branch区别
  6. 创建Maven web工程不能解析EL表达式的解决办法
  7. 用原生js实现一个new方法
  8. 在Mac下配置Maven环境
  9. HDU - 1407 打表
  10. Java线程的六种状态