== 与equals 的区别
==
使用==的时候会根据对象的类型为引用对象还是值对象分开处理,如果是值对象的话会直接比较2个值是否相等,如果是引用对象的话会比较内存地址是否相同
equals
equals 是Object 类提供的方法,除了值对象之外的其他对象都可以通过调用equals比较,如果没有重写此方法那么实质上也是比较2个对象的内容。
为什么需要重写equals
当我们的对象之间是否相等需要根据对象的内容判断而不是通过对象存储的地址判断的时候我们就需要重写equals。
比如有一个用户类(User),里面有用户编号的属性,不管这个对象是根据什么情况创建出来的,只要他们的编号相同,我们就认为他们是相等的,这个时候就要重写equals。
为什么要重写hashCode
- 前面提到了为什么要重写equals,请看下图,在Object类的equals中有这样一段描述
这段内容上描述的是当我们重写equals方法的时候,我们同样需要重写hashCode方法,因为在object类上约定**‘相等’**的2个对象hashCode方法需要返回相同的值 - 重写hashCode 会影响到HashMap,HashSet等一系列的使用