hashCode方法
由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址
字符串String的散列码是由内容导出 的。 StringBuffer 类中没有定义 hashCode 方法, 它的散列码是由 Object 类的默认 hashCode 方法导出的对象存储地址。
如果重新定义 equals 方法, 就必须重新定义 hashCode 方法, 以便用户可以将对象插入到散列表中
参考:Employee.java:
最好使用null安全的方法Objects.hashCode。如果其参数为null,这个方法会返回0,否则返回对参数调用hashCode的结果。
另外,使用静态方法Double.hasbCode来避免创建Double对象
还有更好的做法 , 需要组合多个散列值时 , 可以调用Objects.hash并提供多个参数。 这 个方法会对各个参数涸用Objects.hashCode, 并组合这些散列值。 这样 Employee.hashCode方 法可以简单地写为:
return Objects. hash (name, sa 1 ary, hi re Day);
Equals与hashCode的定义必须一致:如果x.equals(y)返回true, 那么x.hashCode( )就必须与y.hashCode( )具有相同的值。
如果存在数组类型的域, 那么可以使用静态的Arrays.hashCode方法计算一个散码, 这个散列码由数组元素的散列码组成。