Skip to content

Latest commit

 

History

History
29 lines (24 loc) · 1.31 KB

equal与hashCode.md

File metadata and controls

29 lines (24 loc) · 1.31 KB

==

  • == 对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址。

Object中equals()方法

  • equals:object类中默认也是采用==比较,通常会重写(为了比较成员变量中的值)。如果不作处理,跟 == 没什么差别,比较内存地址是否一样。
public boolean equals(Object obj) {
        return (this == obj);
    }

hashCode()

  • Object中的方法,将对象的内存地址转化成整数之后返回。
  • 约定:如果两个对象相等,必须具备相同的哈希码;如果两个对象哈希码想等,则两个对象可能相等,可能不想等。

String 中重写了equals()方法

  • 字符串的equals()是对值进行对比,两个不同地址存放的相同的字符串,equals()方法返回true

为什么重写equals()的时候还要重写hashCode()

  • 由于 hashCode() 中的约定
  • 规定:如果两个对象调用equals方法返回true,那么两个对象的hashCode必须返回相同的整数。
String s1 = new String("hello");
String s2 = new String("hello");
    s1.euqals(s2); //返回true
    //但是 s1.hashCode() 不一定等于 s2.hashCode() 就违背了规定。
// 所以要对hashCode方法进行重写。因此String类中不仅重写了equals 还重写了 hashCode