equals ,hashCode 重写步骤的详解
来源:互联网 发布:xp系统解压缩软件 编辑:程序博客网 时间:2024/05/29 03:40
// 系统自动生成的对象的唯一编号
// 1. equals 相等的两个对象,hashCode 必须保持一致
// 系统为了提高效率,HashSet 等, 判断两个对象相等的时候,会先比较hashCode
// 如果一致,调用equals 进行比较,如果不一致,就认为不相同,就不再调用equals 方法了(equals 方法比较复杂)
// 重写equals 方法必须重写hashCode ,保证值相等对象,hashCode 也相等。
//
// 2. hashCode 相等的 equals 不一定相等
“`
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// 可以传入任意对象
if (this == obj) // 同一个对象进行比较肯定是相同的
return true;
if (obj == null) // 如果参数为null,肯定不相等
return false;
if (!(obj instanceof People)) // instance 实例化,创建对象
return false; // instanceof 判断 是否是某个类的对象
// 判断 obj(传入的参数) 是否是People 或其子类的对象
// true 是, false 不是
// 排除所有的错误情况,进行值的比较 People other = (People) obj; // 强制转换为People 类型 // obj 的编译时类型是Object ,决定了我们写代码的时候能够调用哪些属性和方法 // 调用不了People 类的name 和 age 属性 // 通过强制转换,把编译时类型改为People,就可以调用People 的属性和方法了 // 比较两个对象的属性,是否相等 // 基本类型使用 == 进行值相等的比较 if (age != other.age) return false; // 引用类型使用equals 进行值相等的比较 if (name == null) { // 如果名字为空,调用equals 方法会产生空指针异常 if (other.name != null) return false; } else if (!name.equals(other.name)) // 取反,不相等的时候返回false return false; return true; } // HashSet 相同的元素只会添加一个,靠的是hashCode 和equals 方法 // 引用类型 == 比较的是地址,equals 默认比较的也是地址 // 可以重写equals 方法实现值的比较,比如:String // 重写 equals 必须重写 hashCode,两者保持一致 // equals 相等,hashCode 相等,equals 不相等,hashCode 也不相等 // 重写equals 方法和 hashCode方法后,contains 比较的是值 System.out.println(list.contains(p2)); // true // 重写equals 方法和 hashCode方法后,indexOf进行比较,是值的比较。contains 其实就是return indexOf(o) >= 0; // 找到就返回对应的索引,找不到就返回 -1; System.out.println(list.indexOf(p2)); // 0
- equals ,hashCode 重写步骤的详解
- equals,hashCode,compareTo的重写
- Hashcode和equals的重写
- equals和hashcode的重写
- 详解重写equals()方法就必须重写hashCode()方法的原因
- 详解重写equals()方法就必须重写hashCode()方法的原因
- 重写equals时还必须重写hashcode方法,详解
- 重写equals时还必须重写hashcode方法,详解
- equals和hashcode的重写规则
- 重写hashcode() AND equals()的作用
- 重写hashCode()和equals()方法的必要
- equals()和hashcode()的探讨和重写
- 同时重写equals和hashCode的意义
- 重写hashCode与equals方法的作用
- Java toString equals hashCode 方法的重写
- equals 和 hashCode 的重写方法
- 重写hashCode与equals方法的作用
- Java 重写 equals 与 hashCode 的注意事项
- python版2048小游戏
- 回型遍历
- 是选择债券基金还是自己购买债券?
- HDU 1166 敌兵布阵 (线段树点更新区间查询)
- Java的web项目中使用cookie保存用户登陆信息
- equals ,hashCode 重写步骤的详解
- Java之多线程中java.util.concurrent.atomic包
- java多线程之volatile
- ANTLR教程(五)语法树节点间数据传递
- Bootstrap(一)基础小知识
- 深入理解计算机系统(3.7)------过程(函数的调用原理)
- ACM第二次ABCDEFGHI
- Java常用异常整理
- Floyd,Dijkstra,SPFA模板整理(以[HDU2544-最短路]为例 )