public class Test {
public static void main(String args[]) {
int i = 10;
Integer a = new Integer(i);
System.out.println(a); //tostring method overriden
System.out.println(a.hashCode());
}
}输出
10 10现在,我的问题是,为什么hashCode()方法在这种情况下是过度的。如果我想在上面的代码中找到包装类对象a的对象引用。我该怎么做?
发布于 2014-08-05 12:53:10
在您的情况下,对整数的对象引用是a。与Java中的C不同,您无法获得指向对象的引用指针。hashCode不用于标识内存中对象的地址位置。
在hashCode API中,
返回对象的哈希代码值。哈希表(如HashMap提供的哈希表)支持此方法。
事实证明,整数的hashCode最有效的值是值本身。
如果您仍然想获取对象的原始哈希值,我建议使用System.identityHashCode方法。
System.identityHashCode(a)发布于 2014-08-05 12:58:29
我的问题是,为什么在这种情况下hashCode方法是过度的?
包装,就像字符串一样,是不可变的。如果一个类的每个不同的对象都有一个不同的值(状态),那么这个值就是一个完美的哈希码:零碰撞,总熵,均匀分布.
如果我想在上面的code.How中找到包装类对象a的对象引用,我会这样做吗?
使用System.identityHashCode()
发布于 2014-08-05 13:00:34
在Java中,hashcode有助于在两个对象之间提供一个快速的比较提示。由于具有相同值的两个不同的Integer是相等的,它们应该具有相同的散列。这就是为什么值被用作散列的原因。
https://stackoverflow.com/questions/25139267
复制相似问题