标签:obj 对象 方法 equals hashCode Person eqauls true
1、Java中eqauls方法和hashCode方法
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同
(2)如果两个对象的hashCode相同,它们并不一定相同(不一定是同一对象)
如果违背了上述原则就会发现在使用容器时,相同的对象可以出现在同一个Set集合(Set不能存储相同的元素)中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)
2、equals方法的特性
(1)自反性
x.equals(x):true
(2)对称性
x.equals(y)返回true时,y.equals(x)也必须返回true
(3)传递性
x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true
(4)一致性
当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值,而且对于任何非null值的引用x,x.equals(null)必须返回false
3、实现高质量的equals方法的诀窍
(1)使用==操作符检查“参数是否为这个对象的引用”
(2) 使用instanceof操作符检查“参数是否为正确的类型”
(3)对于类中的关键属性,检查参数传入对象的属性是否与之相匹配
(4) 编写完equals方法后,问自己它是否满足对称性、传递性、一致性
(5)重写equals时总是要重写hashCode
(6)不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解
public boolean equals(Object obj) { // 判断当前对象和传递的对象 if (this == obj) { return true; } // 判断传递进来的对象是否是Person类型 if (!(obj instanceof Person)) { return false; } // 将obj向下转型为Perosn引用,可以访问Person特有内容,否则只能访问共有内容 Person p = (Person) obj; return this.age == p.age && this.name == p.name; }
标签:obj,对象,方法,equals,hashCode,Person,eqauls,true 来源: https://www.cnblogs.com/zhai1997/p/12722440.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。