java中==和equals和hashCode的区别?
通俗点讲:
==:等于,equals:相同。
==:看看左右是不是一个东西,equals:看看左右是不是长得一样。
==是指对内存地址进行比较,equals()是对字符串的内容进行比较,Object里的equals的实现就是直接调用了==操作。
"==" 可比较基本数据类型的值是否相等,如果用于比较引用数据类型数据的时候比较的是两个对象 的内存地址,equals方法默认情况下比较也是两个对象 的内存地址,
如果重写equals hashcode方法,比较的是两个字符串对象的内容是否一致.( 而比较地址值是没有意义的,所以,一般子类也会重写该方法。)
hashCode():返回对象在内存的实际地址值,可以用于判断是否是同一个对象。
1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
【3是2的逆命题其实是一个意思。
解析:如果两个对象的hashcode相等,他们的equals应该相等,不过请注意:这个只是规范,
如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的】
4、如果两个对象hashcode不相等,他们一定不equals。
覆盖equals时总要覆盖hashCode,否则会导致该类无法结合某些集合一起正常运作( HashMap、HashSet和Hashtable。)
https://www.cnblogs.com/kexianting/p/8508207.html