09 Java相等判断方法

JavaSE 基础之九

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并不绝对可靠。
  • 解决方案
    1. 对于大量或者快速的对比,如果全部使用equals()方法,效率比较低耗时比较多。
    2. 每当要对比的时候,先拿hashcode看hash值是否一样,如果hash值不一样的直接表示当前对象不相等;如果hashcode相等,再用equals()去对比,都相等,则表示当前对象相等。

posted on 2019-03-10 20:12  PenjayFeng  阅读(355)  评论(0编辑  收藏  举报

导航