java.lang.Integer.IntegerCache介于-128和127之间的原因?

java.lang.Integer.IntegerCache介于-128和127之间的原因?,java,Java,java.lang.Integer有一个内部缓存(IntegerCache),可以优化对-128到127之间的数字的访问。问题是为什么只在这些数字之间?为什么不将-256改为255?以适合一个字节。从-256到255是512个数字,需要9位-128到127,一个有符号字节的范围,需要8位,一个字节的容量。可能他们使用一个1字节的int来存储和索引缓存,而一个有符号的1字节的int是从-128到127。 -256到255至少可以用一个2字节的int来处理,这太多了,因此不能慢下来。为什么你认为你的

java.lang.Integer
有一个内部缓存(
IntegerCache
),可以优化对-128到127之间的数字的访问。问题是为什么只在这些数字之间?为什么不将-256改为255?

以适合一个字节。从-256到255是512个数字,需要9位-128到127,一个有符号字节的范围,需要8位,一个字节的容量。

可能他们使用一个1字节的int来存储和索引缓存,而一个有符号的1字节的int是从-128到127。
-256到255至少可以用一个2字节的int来处理,这太多了,因此不能慢下来。

为什么你认为你的范围更好?如果他们选择了这些数字,你会问为什么不-512到511。他们不得不做出一个很好的妥协,选择了这些数字。与散列码(31)不同,-128到127是完全任意的。有没有证据(数学)证明-128比127更好?他们还说,是否符合JLS。但问题仍然是为什么会出现这种特定范围。此外,如果范围如此重要,那么为什么允许对其进行修改?@AlexandreSantos范围并不重要——它被选为内存使用方面的合理折衷方案。理想的情况是缓存所有整数,但如果这样做的话,会造成相当严重的堆大小要求。所以你需要在某处设定一个限制。。。它可能是不同的,在某些JDK实现中可能是不同的,如果您愿意,您可以对其进行不同的定义。在我看来,最好为一定数量的
Integer
s缓存,以避免创建这些不可变对象的新实例。另一方面,如果您想要/需要缓存更多的
Integer
s,您可以编写自己的缓存,或者更好地利用JVM并使用一个配置。我不明白您所说的一个字节是什么意思。IntegerCache不使用字节来存储任何内容。顺便说一句,它是可配置的,可以容纳超过此范围的数据。为什么它必须容纳一位?不,它使用
静态最终整数[]缓存