java中的包装类奇怪行为

java中的包装类奇怪行为,java,Java,输出: 10 十, 现在我的问题是,为什么在这种情况下会覆盖hashCode()方法。 如果我想在上面的代码中找到包装类对象a的对象引用。 如何操作?在您的案例中,对整数的对象引用是a。与C不同,在Java中,您无法获得指向对象的引用指针。hashCode不用于标识内存中对象的地址位置 从API来看 返回对象的哈希代码值。支持此方法是为了使用哈希表,例如HashMap提供的哈希表 事实证明,整数的hashCode的最有效值是值本身 如果您仍然希望获得对象的原始哈希值,我建议使用该方法 我的问题是

输出
10
十,

现在我的问题是,为什么在这种情况下会覆盖
hashCode()
方法。 如果我想在上面的代码中找到包装类对象a的对象引用。
如何操作?

在您的案例中,对整数的对象引用是
a
。与C不同,在Java中,您无法获得指向对象的引用指针。
hashCode
不用于标识内存中对象的地址位置

从API来看

返回对象的哈希代码值。支持此方法是为了使用哈希表,例如HashMap提供的哈希表

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

如果您仍然希望获得对象的原始哈希值,我建议使用该方法

我的问题是为什么在这种情况下会覆盖hashCode方法

包装器和字符串一样是不可变的。这么说来,如果一个类的每个不同对象都有不同的值(状态),那么这个值就是一个完美的散列码:零冲突、总熵、均匀分布

如果我想找到包装类对象a的对象引用 在上面的代码中。我怎么做


在Java中使用
System.identityHashCode()

,hashcode有助于在两个对象之间提供快速的比较提示。由于具有相同值的两个不同的
整数
相等,因此它们应该具有相同的哈希值。这就是将该值作为哈希值的原因。

也许这就是您要寻找的,通过获取引用,您将做什么。仅供参考
Integer
对象在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());
    }
}
System.identityHashCode(a)