包装类java中的奇怪行为

use*_*666 4 java

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

产量:
10
10

现在我的问题是为什么hashCode()在这种情况下覆盖方法.如果我想在上面的代码中找到包装类对象的对象引用.我该怎么做?

ada*_*shr 5

在您的情况下对整数的对象引用是a.与C不同,在Java中,您无法获得指向对象的引用指针.在hashCode不用于识别在存储器中的对象的地址位置.

hashCode API,

返回对象的哈希码值.支持此方法的好处是哈希表,例如HashMap提供的哈希表.

事实证明,hashCode整数的最有效值是值本身.

如果您仍想获取对象的原始哈希值,我建议使用该System.identityHashCode方法.

System.identityHashCode(a)
Run Code Online (Sandbox Code Playgroud)