use*_*951 34 java boolean hashcode
在下面的代码中,哈希码总是相同的.为什么会那样?
码:
public class BooleanClass {
public static void main(String[] args) {
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean(false);
Boolean b3 = new Boolean(true);
Boolean b4 = new Boolean(false);
Boolean b5 = new Boolean(false);
Boolean b6 = new Boolean(true);
System.out.println(b1.hashCode());
System.out.println(b2.hashCode());
System.out.println(b3.hashCode());
System.out.println(b4.hashCode());
System.out.println(b5.hashCode());
System.out.println(b6.hashCode());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1231
1237
1231
1237
1237
1231
Run Code Online (Sandbox Code Playgroud)
始终使用相同的数字1231并1237打印.任何原因?
Gok*_* KP 159
JavaDoc中的Boolean.hashCode()方法,说:
1231如果此对象表示true,则返回整数;1237如果此对象表示,则返回整数false.
Har*_*ezz 51
hashCode()的合同是:
如果根据
equals(Object)方法两个对象相等,则hashCode()在两个对象中的每一个上调用方法必须产生相同的整数结果.
虽然布尔值只有两个值,true并且false只得到两个不同的哈希码.
She*_*nar 20
直接来自布尔类:
public int hashCode()
{
return ((this.value) ? 1231 : 1237);
}
Run Code Online (Sandbox Code Playgroud)
这是为布尔类型生成哈希码的方法.这就是为什么你总是得到相同的哈希码为true或false.
这是布尔的构造函数
public Boolean(boolean paramBoolean)
{
this.value = paramBoolean;
}
Run Code Online (Sandbox Code Playgroud)
所以this.value将为true或false,如果为true,它将给出1231,如果为false则给出1237
Jos*_*rts 11
散列函数的要点是将任意长度的数据映射到固定长度的数据.哈希函数返回的值称为哈希值,哈希码,哈希值,校验和或简单哈希值.如果输入相同,散列函数将始终返回完全相同的散列,因此散列true将始终相等,1231并且散列false将始终相等1237
如果你真的需要区分实例而不是值 - 这很少是你真正想要的,但偶尔也会发生 - 请参阅IdentityHashMap.
(基本上,IdentityHashMap绕过对象的"真实"类中的.equals()和.hashcode()实现,并使用它们Object.)
| 归档时间: |
|
| 查看次数: |
5268 次 |
| 最近记录: |