hashCode()与equals()深入分析
首先要知道,Object中hashCode方法是native方法,会根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。
1.为什么重写equals()方法的同时也要重写hashCode()方法?
重写之前equals() 方法比较的是引用是否相同,与“==”作用一样。
重写之后比较的是对象是否相同。假如重写的equals()后不重写hashCode()方法。在使用hashMap等已散列表为基础的Collection时会出现如下问题:在向map中put元素时,hashMap检查key是否唯一是通hashCode方法。不重写hashCode方法,相同对象的hash值不同,会被认作不同对象,与equals方法结果矛盾。