java - 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的不同?
解决方案
这是意料之中的。前三行是装箱转换,并指定 Integer::valueOf 返回包含范围 -128 到 127 的相同实例。
您明确地将 new 用于 c。这将始终创建一个返回不同哈希码的新实例。如果你new Integer(1)
用它替换Integer.valueOf(1)
它将返回与其他相同的哈希码。
推荐阅读
- jsonschema - 允许引用模式中的其他属性,但不允许其他属性
- python - model.predict() 没有产生预期的标签?
- javascript - 优化 React 性能:使用 Axios 的 Memoize 函数 GET Request with useMemo 或 useCallback?
- git - 我可以将我的分支从另一个用户发布到我的 github 页面吗
- javascript - 仅在 HTML 代码的一部分添加 js 库
- python - 从 groupby 中提取组
- javascript - onclick 显示和隐藏不同文本时遇到问题
- html - 为什么 React 输入元素嵌套在组件中时会失去焦点?
- asp.net - Azure Key Vault Connected Service 到 ASP.NET 4.7.1:CompilationLock 异常
- mysql - Spring - 如何连接到数据库mysql