望《JAVA核心技术》时遇到的疑问

看《JAVA核心技术》时遇到的疑问
《JAVA核心技术》第8版 第165页

 public int hashCode()

 return 7*name.hashCode()
          +11*new Double(salary).hashCode()
          +13*hireDay.hashCode();
}

疑问:取salary 的散列码时为什么还要new Double(salary),而不是salary.hashCode()?
------解决方案--------------------
Object才有hashCode()方法
你的salary是基本类型变量吧
------解决方案--------------------
因为在第159页,第72行
将其定义为基本数据类型了:
private double salary;


如果直接写:
salary.hashCode()

由于salary是基本数据类型,并不是继承自Object的对象,从而没有实现hashCode方法,最终会导致编译错误。

而和它看起来很类似的name,由于是String类型的对象,就可以直接写成name.hashCode

为了避免编译错误,所以写成:new Double(salary).hashCode()

另外一种方法是:
把salary定义为Double而不是double,这样就可以直接写salary.hashCode()

再推荐一篇文章,写得蛮好的,共享一下:
http://hi.baidu.com/xxgshxs/item/e1620caa197b06f615329b91