Java "==","equals",hashcode

终于搞清楚这三者的关系了。。


1. “==” 关系操作符用来比较基本类型的值是否相等
    作用于引用类型则是比较两个类型的引用是否相等

2. “equals” 集成自Object 对象的 equals 方法
    public boolean equals(Object obj){
      return this == obj;
    }
   如果类不覆盖此方法则默认比较两个对象的引用
   Thinking in Java 里面建议类都覆盖这个方法,用来比较两个类型的值是否相等。
   String 类覆盖了此方法用于比较两个String的内容是否相等。

3.hashCode 是Java Object类提供的一个本地方法,它的计算跟对象的内存地址有关。
  本来跟“==”,“equals”没有什么关系的,它是用来在使用Hash的容器如hashSet,HashMap中查找对象用的。 Hash容器在查找对象的时候,先比较两个对象的hashcode是否相等,如果两个对象的HashCode 相等,将会被放在容器的同一位置,然后再用equals方法判断两个对象的值是否相等来定位具体的对象,因此有时候如果只覆盖hashCode而不覆盖equals方法会出现问题。

猜你喜欢

转载自lentty.iteye.com/blog/2244050