黑马程序员技术交流社区
标题:
重写equals的问题?
[打印本页]
作者:
熊永标
时间:
2013-1-9 21:05
标题:
重写equals的问题?
public int hashcode(Object obj1,Object obj2)
{
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + old;
return result;
}
复制代码
请问当在复写对象的hashcode()方法时,乘上一个常量31,这是为什么呢
作者:
黄锦成
时间:
2013-1-9 23:07
这个是自定义的,你可以不用31的,用其他的也行,只是为了保证hashcode唯一
作者:
熊永标
时间:
2013-1-10 08:39
乘以一个数和不乘以一个数有什么区别呢,最多也就使这个数变大而已,怎么就能使其唯一了呢
作者:
黑马吕世成
时间:
2013-1-10 10:24
确实是为了保证唯一性!
举个例子吧,person类中计算哈希值用到name和age,这里把age看做Integer写的:如下
int hashcode = name.hashCode()+age.hashCode() ;
如果只是这样的话,可能会有一种情况就是person1对象的name哈希值等于12,age哈希值等于23 。
而另外一个person2对象的name哈希值是23,age哈希值是12 。这是两个对象的哈希值相等了,这个是不合理的吧!
此时我们如果把name或是age的哈希值乘以任意一个大于一的数,就可以极大的避免这种哈希值相同的情况出现。
不知道说清楚了没!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2