为什么Java中相同的整数值有不同的内存地址? [复制]

2023-12-09

今天是我第一次尝试Java语言。当我尝试这段代码时,我感觉很奇怪:

int a =500;
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(a));

所有这些结果都是不同的。但是当我把500改为50时,结果是一样的。

为什么?


但是当我把500改为50时,结果是一样的。

自动装箱会缓存基元到对象的转换。小值得到相同的对象,较大值则不然。

注意:虽然始终缓存 -128 到 127 之间的值,但可以缓存更高的值,具体取决于命令行设置。请参阅来源Integer更多细节。

这也称为享元模式


您可以使用以下命令设置整数缓存的最大大小

-Djava.lang.Integer.IntegerCache.high=NNNN
-XX:AutoBoxCacheMax=NNNN
-XX:+AggressiveOpts  // sets it higher depending on the version e.g. 10000

http://martykopka.blogspot.co.uk/2010/07/all-about-java-integer-cache.html

http://www.javaspecialists.eu/archive/Issue191.html

我感觉很奇怪

我知道你读这个问题的意思。 ;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Java中相同的整数值有不同的内存地址? [复制] 的相关文章

随机推荐

  • 核心数据中的可转换属性无法导出/与 iCloud 同步

    我在用NSPersistentCloudKitContainer 所有数据均在 iCloud 中同步 卸载应用程序后 它会正确同步 但是 需要对敏感数据进行加密 我将密码属性设置为可转换 因此在本地工作得很好 但是当我删除该应用程序时 再次
  • 在 Origin 中将破幂律实现为拟合函数

    再会 我正在尝试使用 origin OriginLab 中的函数生成器来创建一个新函数来适应破碎的幂律 http en wikipedia org wiki Power law Broken power law 所以 我想我已经把实际的功能
  • 从 GUI 类 PyQt4 以外的类更改进度条的值

    我有一个由 Qt 设计器创建的 GUI 类 其中有一个进度条 还有另一个类 其中完成所有数字运算 在此期间我希望进度条定期更新 我认为我会这样做的方式是在其他班级中做类似的事情 gui progressbar setValue some 但
  • 在没有 xts 对象的情况下在 PortfolioAnalytics 中创建有效前沿

    有没有办法在 PortfolioAnalytics 包中创建有效前沿而不指定资产回报的 xts 对象 相反 我想提供预期回报向量和协方差矩阵 有两种方法 首先 您可以提供一个包含矩阵的列表 其结构如下所示 然后调用 Optimize por
  • 在 Mac 应用程序中的保存对话框中包含 iCloud

    我已经实施了iCloud支持我的 Mac 基于文档的应用程序 NSDocument子类可以处理本地存储上打开的保存文件 并且iCloud 但是 我可以将我的文件上传到iCloud只需将其拖动到 打开新文件 面板上即可 当应用程序提示用户保存
  • 如何区分 EOF 字符和实际的文件结尾?

    When reading a file I understand the last character provided is an EOF Now what happens when I have an EOF character in
  • Mojarra 2.0.3 中复合组件所需属性抛出异常

    我一直在使用 JSF 2 0 复合组件 但我对其中的 require 属性有点困惑composite attribute标签的意思是做 文档指出 如果页面作者必须提供此属性的值 则必需的属性为 true 我将其解释为必须为所有具有复合属性的
  • apollo-android可以用作java客户端吗?

    我正在开发一个需要与 Github GraphQl API 通信的 Spring Boot 应用程序 apollo android 可以用于此目的吗 由于所有可用的稀缺文档以及示例项目都是用 android 编写的 所以我不确定 维护者在这
  • 获取距离直线最近的点

    我想要一个直接的 C 函数来获取距离线段 AB 最近的点 从点 P 抽象函数可能如下所示 我已经搜索过了 但没有找到可用的 由我 解决方案 public Point getClosestPointFromLine Point A Point
  • Pandas:根据子字符串删除重复项[重复]

    这个问题在这里已经有答案了 我有以下两列 来自 Pandas DataFrame antecedents consequents apple orange orange apple apple water apple pineapple w
  • 检查 PDO 是否存在的最佳方法是什么[重复]

    这个问题在这里已经有答案了 有人告诉我 rowCount 不安全 所以我想在这里问它 我有 2 个例子 想知道检查某些东西是否存在的最安全和最好的方法是什么 sql SELECT count FROM users WHERE usernam
  • 更改 XML 序列化中元素的类型

    我在 XML 序列化方面遇到了巨大的问题 我有两个类 都需要可序列化 在继承的类中 我想更改序列化行为 以便将字符串属性序列化为复杂类型 public class Animal XmlElement ElementName NAME pub
  • 使用 $ 符号为上一行中存在的变量赋值

    我正在尝试了解 MS DOS v2 0源代码 特别是其中的一些代码MSDATA ASM 该代码最初是使用 35 多年历史的 MASM 汇编器 未商用的版本 进行汇编的 我感兴趣的代码就在开头附近 SUBTTL Initialized dat
  • 如何在两个项目共享的xaml文件中添加用户控件的引用

    I have created a class library CustomMapControl in the solution and inside this class library I create a UserControl Map
  • 如何在Android Studio中创建发布Android库包(AAR)(不是调试)

    我已经构建了我的 Android 库包 AAR 并且构建的结果被创建在 app build outputs aar 文件夹 这个文件夹中的文件名为 app debug aar 所以我猜它是在调试模式下构建的 所以我想知道如何生成构建的版本
  • 在 Angular4 的输入字段中添加千位分隔符

    我在前端使用 Angular 4 我想在输入字段中插入千位分隔符 我尝试了这段代码 但它不起作用
  • 获取我的应用程序中其他应用程序(进程)的上下文:Android

    在我的应用程序中 我需要访问其他已安装应用程序的上下文 是否可以使用任何应用程序的包名称获取上下文 如果我访问其他应用程序的上下文 会出现任何安全问题吗 任何帮助将不胜感激 try this public abstract Context
  • 说话人识别[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我如何区分两个人说话 就像有人说 你好 然后另一个人说 你好 我应该在音频数据中寻找什么样的签名 周期性 非常感谢任何能回答这个问题的人 这个问题的解决方案在于数字信号处理 DS
  • 检查电子邮件,然后根据脚本对短信做出反应

    好的 我希望在 Linux 机器上执行此操作 我需要能够接收短信 毫无疑问 它会通过电子邮件到达 然后采取行动 例如 一条消息带有日期 时间和名称 然后我需要将该信息导出到 SQL 数据库 任何人都可以快速轻松地解决此问题 我想我现在已经对
  • 为什么Java中相同的整数值有不同的内存地址? [复制]

    这个问题在这里已经有答案了 今天是我第一次尝试Java语言 当我尝试这段代码时 我感觉很奇怪 int a 500 System out println System identityHashCode 500 System out print