equals(), "== ",hashcode() 详细解释
2024-08-31 14:16:57
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
最新文章
- void 关键字
- php开启openssl的方法,openssl安装
- windows-docker开发我常用命令 docker-machine ssh default
- URAL 1152. False Mirrors (记忆化搜索 状压DP)
- Tcp服务端判断客户端是否断开连接
- 多线程(Thread),其实很简单!
- centos账户的uid和gid
- 简单的拖动手势控制侧拉view显示
- 寻找数列中第k大的数算法分析
- c++,内联成员函数
- 使用BeanUtils类实现DTO之间的同名属性复制
- Java关于字符串工具类~持续汇总~
- 创建SVN源库钩子
- 【读书笔记】iOS-更新项目前要注意的事情
- html播放音乐
- CAP定理为什么只能同时满足两个
- SOCKET,TCP/IP,UDP,HTTP,FTP总结
- 利用springMVC包装类上传多个文件
- linux内核分析 第八周读书笔记
- React Native vs. Cordova.
热门文章
- CSS选择器与CSS的继承,层叠和特殊性
- PHP open_basedir配置未包含upload_tmp_dir 导致服务器不能上传文件
- ubuntu server 18.04 网络配置
- Spring5参考指南: Resources
- 写给Java程序员的Java虚拟机学习指南
- 如何迅速分析出系统CPU的瓶颈在哪里?
- 解决layui动态追加的点击事件不起作用问题
- redhat7.3 dns服务器配置
- ansible roles 自动化安装
- DVWA-对Command Injection(命令注入)的简单演示与分析