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)