一、区别
==比较的是对象的地址,在不重写equals()和hashcode()的情况下,equals()和hashcode()比较的也是地址。但是在重写equals()和hashcode()后,equals()和hashcode()就可以比较内容:
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()); }
运行结果:
==:falseequals():trueuser1的hashcode:509445user2的hashcode:509445
二、注意的点
1、如果需要自定义equals()方法,则重写equals(),为遵守契约,需同步重写hashcode();
2、对于String的几个类型,equals()和hashcode()已经重写所以可以用equals()对内容作对比
三、提出的问题
1、equals()为true是否保证hashcode()一定一致?
对于按照契约重写equals()和hashcode()的情况下,equals()为true能保证hashcode()一致
2、hashcode()一致是否保证equals()为true?
不能,会出现哈希碰撞的情况