09 Java相等判断方法
09 Java相等判断方法
1. ( == )
( == )比较的是对象值,如果是地址,比较两个地址是否相等。
2. equals()方法
equals()也默认与( == )一样比较地址,但是每个类都继承了object,每个类都可以重写equals(), 你可以自己实现比较的逻辑,比如比较对象的所有属性和方法是否相等。
String类重写equals(),比较两者的每个字符是否相同。
3. equals()方法 与hashcode方法比较
- 效率对比
1. 两者都是java设计用来判断两个对象是否相等的方法,但是equals()在进行比较的时候,逻辑是比较对象的所有属性是否相等,如果属性全部相等,当前两个对象就相等,但是这种验证方法效率比较低。
2. 如果用hashcode来比较,hashcode方法用到的hash值来比较(hash算法),效率非常高。 - 可靠性对比
1. hashcode并不是完全可靠的,有时候不同对象生成的hashcode一样。
2. equals()相等的两个对象,他们的hashcode值一定相等,也就是说equals()来判断绝对是可靠的。
3. hashcode相等的两个对象,使用equals()进行比较并不一定相等。也就是hashcode并不绝对可靠。 - 解决方案
- 对于大量或者快速的对比,如果全部使用equals()方法,效率比较低耗时比较多。
- 每当要对比的时候,先拿hashcode看hash值是否一样,如果hash值不一样的直接表示当前对象不相等;如果hashcode相等,再用equals()去对比,都相等,则表示当前对象相等。
Association between wise men is as pure as water.
posted on 2019-03-10 20:12 PenjayFeng 阅读(355) 评论(0) 编辑 收藏 举报