当前位置: 首页 > 知识库问答 >
问题:

为什么Integer类缓存的值在-128到127之间?

谈秦斩
2023-03-14

只是想知道,为什么在-128到127之间?

Integer.valueOf()文档说明它“缓存频繁请求的值”。但是-128127之间的值是否经常被请求为真实值?我认为经常要求的价值是非常主观的。
这背后有没有可能的原因?

从文档中还说明:“..并可能缓存此范围之外的其他值。”
如何实现?

共有1个答案

白念
2023-03-14

只是想知道,为什么在-128到127之间?

可以缓存更大范围的整数,但至少必须缓存-128到127之间的整数,因为这是Java语言规范(强调我的)规定的:

如果装箱的值p是true、false、byte或\u0000到\u007f范围内的char、或-128到127(含)之间的int或short数,则设r1和r2是p的任意两次装箱转换的结果。r1==R2总是这样。

 类似资料:
  • 问题内容: 关于我之前的问题,为什么与Integer.valueOf(String)进行==比较会得出127和128的不同结果?,我们知道Integer class有一个缓存用于存储-128和之间的值127。 只是想知道为什么在-128和127之间? Integer.valueOf()文档指出,它“ 缓存经常请求的值 ”。但是,-128和之间的值127是否经常被要求是真实的?我认为经常要求的价值观

  • 问题内容: 输出: 输出: 注意:-128至127之间的数字为真。 问题答案: 当你使用Java编译数字文字并将其分配给Integer(大写)时,编译器将发出: 当你使用自动装箱时,也会生成此行代码。 valueOf 实现了“合并”某些数字,对于小于128的值,它将返回相同的实例。 从Java 1.6源代码的第621行: high可以使用system属性将的值配置为另一个值。 如果使用该系统属性运

  • 问题内容: 我知道在该主题上也有类似的帖子,但是它们并没有完全解决我的问题。当您这样做时: (显然)大多数时间都会打印,因为以某种方式缓存了[-128,127]范围内的整数。但: 会回来的。我知道我正在请求一个Integer的新实例,但是由于装箱的原语在Java中是不可变的,并且已经有了执行“正确的事情”的机制(如第一种情况所示),为什么会发生这种情况? 如果Integer的所有实例(具有10)都

  • 问题内容: 我无法理解Java常量池常量的工作方式。 我了解字符串的行为,因此可以证明自己与整数常量也是如此。 所以,对于整数 和 直到这里一切都进入我的脑海。 我无法理解的是,当我从127增加整数时,它的行为有所不同。此行为在127之后发生变化,下面是代码段 有人可以帮我理解吗? 问题答案: 不,用于数字的常量池与用于字符串的方法不同。对于字符串,只保留编译时常量-而对于整数类型的包装器类型,如

  • 问题内容: 为什么Integer “ =”运算符不适用于128和Integer值之后的值?有人可以解释这种情况吗? 这是我的Java环境:Java版本“ 1.6.0_37” Java(TM)SE运行时环境(内部版本1.6.0_37-b06) Java HotSpot(TM)64位服务器VM(内部版本20.12-b01,混合模式) 样例代码: 控制台输出的一部分: 谢谢! 问题答案: 查看Integ

  • 问题内容: 我想使用条件比较两个 Long 对象的值。当这些值 小于128时 ,条件将正常工作,但是当这些 值大于或等于128时 ,比较将失败。 例: 上面代码的比较正常进行,但是下面代码失败: 为什么将 Long 变量与 大于127的 值进行比较会出现问题?如果将变量数据类型更改为 长原语 ,则比较适用于所有情况。 问题答案: TL; DR Java将装箱的Integer实例从缓存到。由于您用于