我定义了一个teacher类


privateStringname;
privateintage;

//下面是自动生成的hashCode
@Override
publicinthashCode(){
finalintprime=31;
intresult=1;
result=prime*result+age;
result=prime*result+((name==null)?0:name.hashCode());
returnresult;
}


result=prime*result+age;//result的值肯定会被下面的覆盖掉
result=prime*result+((name==null)?0:name.hashCode());
为什么这么写。

5 个解决方案

#1


并不会被下面所覆盖掉啊?
result=prime*result+((name==null)?0:name.hashCode());
注意到这句话中,result也参与了计算,而且放大了31倍。

结合之前的计算,两句话合并相当于是:
result=prime*(prime*result+age)+((name==null)?0:name.hashCode());
代入数字的话也即:
return31*(31+age)+((name==null)?0:name.hashCode());

更多相关文章

  1. java常量的定义
  2. 自定义标签 Unable to find setter method for attribute
  3. 在WorldWind Java / JOGL中使用自定义着色器。
  4. 为可执行文件夹提供自定义图像
  5. jsp中如何使用javabeans,如何使用一个已经定义好的类
  6. 如何使用swig定义和传递ByteBuffer?
  7. 9.JAVA-抽象类定义
  8. javascript(六)js事件绑定浏览器兼容解决方案 attachEvent addEve
  9. 这是我在Java套接字编程中做的一种大家都在谈论的自定义协议吗?

随机推荐

  1. 数据结构学习----线性表(Java版的实现)
  2. Ubuntu 中 java 环境 (sunjdk) 的配置 (
  3. 为什么gradle不会覆盖不同Android风格的J
  4. 最近一个月的面试记录总结
  5. java_easyui体系之更换主题
  6. Zookeeper官网文档—第三章 2.Zookeeper
  7. Java Mail发送邮件
  8. php 调用java 接口
  9. Java虚拟机:类的初始化
  10. 当我运行.jar时,在java.library中会得到一