Object 通用方法容易混淆的定义

先搞清楚各自的定义

  • "==" 用来判断 相等
  • equals() 用来判断 等价
  • hashcode() 用来返回散列值

“==”相等

  • 基本类型,判断两个值是否相等
  • 引用类型,判断两个变量是否引用同一个对象

在Object中未被重写的定义

  • hashcode()是为默认对象的内存地址

  • equals() 比较对象的地址

是本地方法 c,c+语言直接返回对象的内存地址

equals() 等价

引用类型中判断引用的对象是否等价

public class equalExample{
private int x;
private int y;
private int z; public equalExample(int x, int y, int z){
this.x=x;
this.y=y;
this.z=z;
} @override
public boolean equals(Object o){
if(this.o==o) return true; // 引用同一个对象
if(o==null | getClass()!=o.getClass()) return false; // 检测是否同一个类型
// object 对象转型
equalExample that=(equalExample)o;
if(x!=that.x) return false;
if(x!=that.y) return false;
return z==that.z;
}
}

hashCode()返回散列值,而equals()用来判断两个对象是否等价

等价的两个对象散列值一定相同,相同的两个对象不一定等价

在覆盖equals()方法时应该总是覆盖hashCode()方法,保证等价的两个对象散列值也相等

// 实现equals重写,没有实现 hashcode重写
equalsExample e1=new equalsExample(1,1,1);
equalsExample e1=new equalsExample(1,1,1); System.out.println(e1.equals(e2)); // true HashSet<equalsExample> set=new HashSet<>();
set.add(e1);
set.add(e2);
System.out.println(set.size()); // 2

最新文章

  1. void 关键字
  2. php开启openssl的方法,openssl安装
  3. windows-docker开发我常用命令 docker-machine ssh default
  4. URAL 1152. False Mirrors (记忆化搜索 状压DP)
  5. Tcp服务端判断客户端是否断开连接
  6. 多线程(Thread),其实很简单!
  7. centos账户的uid和gid
  8. 简单的拖动手势控制侧拉view显示
  9. 寻找数列中第k大的数算法分析
  10. c++,内联成员函数
  11. 使用BeanUtils类实现DTO之间的同名属性复制
  12. Java关于字符串工具类~持续汇总~
  13. 创建SVN源库钩子
  14. 【读书笔记】iOS-更新项目前要注意的事情
  15. html播放音乐
  16. CAP定理为什么只能同时满足两个
  17. SOCKET,TCP/IP,UDP,HTTP,FTP总结
  18. 利用springMVC包装类上传多个文件
  19. linux内核分析 第八周读书笔记
  20. React Native vs. Cordova.

热门文章

  1. CSS选择器与CSS的继承,层叠和特殊性
  2. PHP open_basedir配置未包含upload_tmp_dir 导致服务器不能上传文件
  3. ubuntu server 18.04 网络配置
  4. Spring5参考指南: Resources
  5. 写给Java程序员的Java虚拟机学习指南
  6. 如何迅速分析出系统CPU的瓶颈在哪里?
  7. 解决layui动态追加的点击事件不起作用问题
  8. redhat7.3 dns服务器配置
  9. ansible roles 自动化安装
  10. DVWA-对Command Injection(命令注入)的简单演示与分析