1、区别java
==比较的是对象的地址,在不重写equals()和hashcode()的状况下,equals()和hashcode()比较的也是地址。可是在重写equals()和hashcode()后,equals()和hashcode()就能够比较内容:code
public static void main(String[] args) { User user1 = new User(1, "A", 22); User user2 = new User(1, "A", 22); System.out.println("==:" + (user1 == user2)); System.out.println("equals():" + user1.equals(user2)); System.out.println("user1的hashcode:" + user1.hashCode()); System.out.println("user2的hashcode:" + user2.hashCode()); }
运行结果:对象
==:false equals():true user1的hashcode:509445 user2的hashcode:509445
2、注意的点同步
一、若是须要自定义equals()方法,则重写equals(),为遵照契约,需同步重写hashcode();hash
二、对于String的几个类型,equals()和hashcode()已经重写因此能够用equals()对内容做对比class
3、提出的问题方法
一、equals()为true是否保证hashcode()必定一致?static
对于按照契约重写equals()和hashcode()的状况下,equals()为true能保证hashcode()一致co
二、hashcode()一致是否保证equals()为true?new
不能,会出现哈希碰撞的状况