稍微了解过Object类的同学都应该知道,在Object类方法中存在这么一个方法,那就是public native int hashCode();
可以看到返回值是一个整形的值,这有什么作用呢?
首先我们先来了解下hashCode的特点:
1、HashCode的存在主要是为了查找的快捷性,HashCode是用来在散 列存储结构中确定对象的存储地址的
2、如果两个对象equals相等,那么这两个对象的HashCode一定也相同
3、如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写
4、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这 两个对象在散列存储结构中,存放于同一个位置
HashCode有什么用
首先先来看下一段代码
package hashcode;
public class HashCodeTest {
private String name;
private Integer age;
private boolean flag;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HashCodeTest other = (HashCodeTest) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (flag != other.flag)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public static void main(String[] args) {
System.out.println(new HashCodeTest().hashCode());
System.out.println(new HashCodeTest().hashCode());
System.out.println(new HashCodeTest().hashCode());
System.out.println(new HashCodeTest().hashCode());
System.out.println(new HashCodeTest().hashCode());
System.out.println(new HashCodeTest().hashCode());
}
}
这是输出的结果,可以看出,输出的结果都是不相同的,这就说明创建的对象都不是同意对象。
1097112149
869295101
911511966
1780758511
1876189785
1619327594
hashCode方法是用来产生哈希玛的,而哈希玛是用来在散列存储结构中确定对象的存储地址的,这就方便数据进行存储。
特别注意的是:hashCode值相同对象不一定相等,这个只能代表这两个对象存储在相同的地址中,(当然是散列存储,具体的这里不说)。