Java - hashCode() - equals()
来源:互联网 发布:网络协议分析实验步骤 编辑:程序博客网 时间:2024/05/17 20:31
理论
Object类的equals()特点自反省:x.equals(x)返回真;对称性:x.equals(y)返回真,那么y.equals(x)也返回真传递性:x.equals(y)返回真,y.equals(z)返回真,那么x.equals(z)也返回真一致性:x.equals(y)第一次调用返回真,那么不管调用多少次都应该返回真,前提是x和y不修改对于非空引用x:x.equals(null),都返回falseObject类的hashCode()的特点如果我们重写了equals(),那么也需要重写hashCode(),反之亦然在Java应用程序一次执行过程当中,对于同一个对象的hashCode()的多次调用,他们应该返回同样的值(前提是该对象的信息没有发生变化)对于两个对象来说,如果使用equals()返回true,则hashCode值一定相同如果使用equals()返回false,则hashCode可以相同也可以不同,不同的话则可以提高性能对于Object来说,不同Object对象的hashCode值是不相同的,因为Object类的hashCode值表示的是对象的地址
案例
import java.util.HashSet;import java.util.Set;public class MyHashSet {public static void main(String[] args) {Set<Person> set1 = new HashSet<Person>();set1.add(new Person("lwc"));set1.add(new Person("lwc"));System.out.println(set1);// 增加个两// String也重写了equals()和hashCode()Set<String> set2 = new HashSet<String>();set2.add(new String("aaa"));set2.add(new String("aaa"));System.out.println(set2);// 增加一个// 重写了equals()和hashCode()Set<Student> set3 = new HashSet<Student>();set3.add(new Student("lwc"));set3.add(new Student("lwc"));System.out.println(set3);// 增加一个}}class Person {String name;public Person(String name) {this.name = name;}}class Student {String name;public Student(String name) {this.name = name;}@Overridepublic int hashCode() {return this.name.hashCode();}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (null != obj && obj instanceof Student) {Student stu = (Student) obj;name.equals(stu.name);return true;}return false;}}
== VS equals()
两个基本类型使用==,比较值是否相等两个引用类型使用==,比较是否是同一个对象两个字符串类型使用equals(),是比较内容是否相同两个其他引用类型使用equals(),如果没有重写equals(),默认比较是否是同一个对象
- Java Object equals() & hashCode()
- java--equals与hashcode
- java hashCode equals关系
- JAVA HashSet equals hashcode
- java hashCode() 和 equals()
- Java - hashCode() - equals()
- java 中的hashcode&equals
- java hashCode()和equals()
- java hashcode和equals
- 【java】equals()与hashCode()
- Java equals()和hashCode()
- java,hashcode,equals
- java hashcode equals
- Java object equals hashcode
- java hashmap equals() hashcode()
- java equals hashCode
- java .equals() hashcode
- Java equals和hashCode
- 黑马程序员--09.动态与代理AOP--04【推理动态代理类内部结构I】【InvocationHandler实现类的具体写法】
- Java Socket实战之一 单线程通信
- STL中序列式容器之三deque
- 4 4 Given a binary search tree, design an algorithm which creates a linked list of all the nodes at
- 2010版Excel保存文档就挂掉,解决方法
- Java - hashCode() - equals()
- Struts2返回JSON对象的方法总结
- 水仙花数
- 客户端 用不用 bind 的区别
- 管道通信
- OpenCV FileStorage类学习
- 导航中GPS位置与地图匹配、道路匹配算法
- poj 2576
- Cryptopp密码库在Linux下的安装与使用