文档章节

《Effective JAVA学习笔记》之 equals()

十一11
 十一11
发布于 2016/02/10 20:58
字数 409
阅读 149
收藏 5
import java.util.Arrays;

class Person {
	String name;
	int birthYear;
	byte[] raw;
	
	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof Person))
			return false;

		Person other = (Person) obj;
		return this.name.equals(other.name) && this.birthYear == other.birthYear && Arrays.equals(this.raw, other.raw);
	}
	
	@Override
	public int hashCode() {
		return name.hashCode()  + Arrays.hashCode(raw);
	}
}

如何理解:当你创造出了一个新类,你当然要制定某些规则。比如:新类new出来的两个实例,怎么样才能算一摸一样。这个相等规则就是equals()。 hashCode相当于这个类的身份ID,你可以自定义。当然不同的实例,hashCode肯定是不一样的。

  • 参数必须是Object类型,不能是外围类。

  • foo.equals(null) 必须返回false,不能抛NullPointerException。(注意,null instanceof 任意类 总是返回false,因此上面的代码可以运行。)

  • 基本类型域(比如,int)的比较使用 == ,基本类型数组域的比较使用Arrays.equals()。

  • 覆盖equals()时,记得要相应地覆盖 hashCode(),与 equals() 保持一致。

  • 参考: java.lang.Object.equals(Object)

  • 当x和y两个对象具有x.equals(y) == true ,你必须要确保x.hashCode() == y.hashCode()。

  • 根据逆反命题,如果x.hashCode() != y.hashCode(),那么x.equals(y) == false 必定成立。

  • 你不需要保证,当x.equals(y) == false时,x.hashCode() != y.hashCode()。但是,如果你可以尽可能地使它成立的话,这会提高哈希表的性能。

  • hashCode()最简单的合法实现就是简单地return 0;虽然这个实现是正确的,但是这会导致HashMap这些数据结构运行得很慢。

  • 参考:java.lang.Object.hashCode()


http://www.cnblogs.com/xudong-bupt/p/3960177.html



© 著作权归作者所有

共有 人打赏支持
十一11
粉丝 6
博文 80
码字总数 19784
作品 0
杭州
私信 提问
《Effective Java》—Java进阶必备

《Effective Java》是 Java 领域的经典之作,其影响力不亚于《Think in Java》。它是每个 Java 开发者的必读书籍,值得多次阅读品味,并不断实践其中的经验技巧。 两年前读过此书,当时自身技...

落英坠露
昨天
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
理解 equals(),hashcode()和 ==

这里分别讲==和equals()的关系,以及equals()和hashcode()的关系 讲解之前,需要先明白对象的内容、对象的引用,基本类型,引用类型这几个概念,此处不做解释 一、==和equals() 两者都是比较...

Bour
2018/08/04
0
0
Java拾遗:001 - 重写 equals 和 hashCode 方法

重写equals方法 在Java中Object类是一个具体类,但它设计的主要目的是为了扩展,所以它的所有非final方法,都被设计成可覆盖(override)的。但任何一个子类在覆盖这些方法时都应遵守一些通用...

一别丶经年
2018/08/02
0
0
Effective Java 第三版——40. 始终使用Override注解

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部