【发布时间】:2014-01-20 17:33:30
【问题描述】:
关于我之前的问题 Why do == comparisons with Integer.valueOf(String) give different results for 127 and 128? ,我们知道 Integer class 有一个缓存,用于存储 -128 和 127 之间的值。
只是想知道,为什么介于 -128 和 127 之间?
Integer.valueOf() documentation 声明它“缓存频繁请求的值”。但是,-128 和 127 之间的值是否经常被真实请求?我认为经常要求的值是非常主观的。
这背后有什么可能的原因吗?
从文档中还指出:“..并且可能会缓存此范围之外的其他值。”
这是如何实现的?
【问题讨论】:
-
重新查看文档:Oracle 只是在掩盖他们的问题,以防他们以后决定改变行为。例如,他们可能决定 Java 9 将缓存从 -1024 到 1023。消息是,不要依赖缓存包含或不包含任何特定整数。
-
我假设您从 0 到 X 的循环次数比从 13476 到 Y 的循环次数要多得多。他们一定已经决定也应该包含负值,并且 -128 -> 127 对于有符号字节是有意义的。
-
循环不是几乎总是用原始整数完成的——不是装箱的整数吗?缓存不适用。
-
缓存纯粹是一个性能的东西。只要它不会给您带来性能问题,您就不应该关心缓存的范围。 (在代码中构建对整数缓存的依赖是非常愚蠢的。)
-
@JohnR 它在 Java 语言规范中,请参阅下面的 assylias 答案。