首页 > 解决方案 > new Integer(1) 返回一个不同的 id 为 1

问题描述

假设以下分配:

jshell> int a = 1;
a ==> 1
jshell> int b = 1;
b ==> 1
jshell> var c = new Integer(1);
c ==> 1

使用 System.identityHashCode 检查他们的 id:

jshell> System.out.println(System.identityHashCode(1))
1938056729

jshell> System.out.println(System.identityHashCode(a))
1938056729

jshell> System.out.println(System.identityHashCode(b))
1938056729

jshell> System.out.println(System.identityHashCode(c))
343965883

C返回一个不同的ID,c引用的“1”与a和b的不同?

标签: java

解决方案


这是意料之中的。前三行是装箱转换,并指定 Integer::valueOf 返回包含范围 -128 到 127 的相同实例。

您明确地将 new 用于 c。这将始终创建一个返回不同哈希码的新实例。如果你new Integer(1)用它替换Integer.valueOf(1)它将返回与其他相同的哈希码。


推荐阅读