一、==与equals的区别
基本数据类型(byte、short、int、long、float、double、char、boolean):无论数据类型是什么(除boolean),==比较的都是数据值是否相等
包装类(Byte、Short、Integer、Long、Float、Double、Character、Boolean):==比较的就是数据的内存地址,包装类不同则会报错。而equals比较的是数据值是否相等,如果包装类不同,两个数据值相同,那么返回也是false
二、equals与hashcode的区别及联系
为什么需要在一个对象中重写equals和hashcode方法?
在Java中有两种判断对象相等的方法,一种是equals,一种是hashcode
equals:里面的东西较为全面较为复杂,效率低
hashcode:只需生成一个hash值进行比较,效率高
那为什么不直接用hashcode去进行比较?
因为hashcode不完全可靠,有时不同的对象他们的hashcode却相同(可能是生成hash值的公式有问题),只能说大部分是可靠的
所以得出:
equals相等hashcode一定相等,equals绝对可靠
hashcode相等equals不一定相等,hashcode不一定可靠
如果有大量数据需要快速去比较该怎么处理?
equals与hashcode同时使用
先比较对象的hashcode是否相等,如果相等再去用equals比较,equals如果相等,则表示两个对象一定相同;如果hashcode都不同,则表示两个对象一定不同