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()
方法。
如果我想在上面的代码中找到包装类对象的对象引用。
我该怎么做?
答案 0 :(得分:5)
在您的情况下,对整数的对象引用是a
。与C不同,在Java中,您无法获得指向对象的引用指针。 hashCode
不用于标识内存中对象的地址位置。
来自hashCode API,
返回对象的哈希码值。支持此方法是为了哈希表的优势,例如HashMap提供的哈希表。
事实证明,整数hashCode
的最有效值是值本身。
如果您仍希望获得对象的原始哈希值,我建议使用System.identityHashCode
方法。
System.identityHashCode(a)
答案 1 :(得分:1)
我的问题是为什么在这种情况下覆盖hashCode方法
Wrappers与String一样,是不可变的。这样说,如果一个类的每个不同对象具有不同的值(状态),那么该值就是一个完美的哈希码:零冲突,总熵,同质分布......
如果我想找到包装类对象的对象引用a 在上面的代码中。我该怎么做?
使用System.identityHashCode()
答案 2 :(得分:1)
在Java中,哈希码有助于在两个对象之间提供快速比较提示。由于具有相同值的两个不同Integer
相等,因此它们应具有相同的散列。这就是哈希值的原因。