首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装类在java中的奇怪行为

包装类在java中的奇怪行为
EN

Stack Overflow用户
提问于 2014-08-05 12:49:53
回答 3查看 127关注 0票数 4
代码语言:javascript
复制
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());
    }
}

输出

代码语言:javascript
复制
 10
代码语言:javascript
复制
 10

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

EN

回答 3

Stack Overflow用户

发布于 2014-08-05 12:53:10

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

hashCode API中,

返回对象的哈希代码值。哈希表(如HashMap提供的哈希表)支持此方法。

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

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

代码语言:javascript
复制
System.identityHashCode(a)
票数 5
EN

Stack Overflow用户

发布于 2014-08-05 12:58:29

我的问题是,为什么在这种情况下hashCode方法是过度的?

包装,就像字符串一样,是不可变的。如果一个类的每个不同的对象都有一个不同的值(状态),那么这个值就是一个完美的哈希码:零碰撞,总熵,均匀分布.

如果我想在上面的code.How中找到包装类对象a的对象引用,我会这样做吗?

使用System.identityHashCode()

票数 1
EN

Stack Overflow用户

发布于 2014-08-05 13:00:34

在Java中,hashcode有助于在两个对象之间提供一个快速的比较提示。由于具有相同值的两个不同的Integer是相等的,它们应该具有相同的散列。这就是为什么值被用作散列的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25139267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档