散列码 (hash code) 是由对象导出的一个整数值.
散列码没有规律, 两个不同的对象 x 和 y,x.hashCode()与 y.hashCode()基本上不会相同.
- public static void main(String[] args) {
- String str1 = "HELLO WORLD!";
- String str2 = "hello world!";
- System.out.println(str1.hashCode());
- System.out.println(str2.hashCode());
- }
上面的代码输出两个字符串的散列码:
String 类中计算散列码的源码如下:
可以看出, 字符串的散列码是由内容导出的.
Object 类是所有类的父类, hashCode()方法定义在 Object 类中, 因此每一个类都有一个默认的计算对象散列码的方法,
使用默认的方法计算对象的散列码得到的值是对象的存储地址.
如果在子类中重新定义 equals()方法, 必须重新定义 hashCode()方法, 如果 x.equals(y)放回 true, 那么 x.hashCode()就必须与 y.hashCode()具有相同的值.
例如 Student.equals()通过学生 ID 比较对象, 那么 hashCode()就需要基于 ID 生成散列码.
hashCode()方法应该返回一个整数值(可以是负数), 并合理地组合实体域的散列码, 以便让各个不同的对象产生的散列码分布的更加均匀.
一个比较好的生成方法是:
调用 Objects.hash()方法, 这个方法会对各个参数调用 Objects.hashCode()方法, 然后组合各个参数的散列值.
浅析 Java hashCode()方法
来源: http://www.bubuko.com/infodetail-3279872.html