“==” 与 equals的区别
“==”对于基本类型,比较的是值;对于引用类型比较的是地址。
Object类中equals的默认实现等价于“==”,即比较引用类型的地址。
Java中很多类(如String、Date、Long、HashMap和File类等)都重写了Object类的equals方法,导致其和“==”不等价。
String类中重写的equals是先用“==”比较两个引用类型的引用地址,相同则返回true,引用地址不同再进行字符串比较。
重写equals方法时必须重写hashCode方法
hashCode方法实际上必须要完成的一件事情就是,为该equals方法认定为相同的对象返回相同的哈希值。
Object类中的equals方法区分两个对象的做法是比较地址值,即使用“==”。而我们如若根据业务需求改写了equals方法的实现,那么也应当同时改写hashCode方法的实现。否则hashCode方法依然返回的是依据Object类中的依据地址值得到的integer哈希值。