【发布时间】:2017-06-21 13:33:40
【问题描述】:
为了节省内存,Java 会“重用”所有值在以下范围内的包装对象。
所有布尔值(true 和 false)
所有字节值
从\u0000 到\u007f 的所有字符值(即十进制的0 到127)
从-128 到127 的所有短整型值。
例如:
Integer i1=7;
Integer i2=7;
System.out.println(i1==i2);//true
对于 Double、Long 以及使用常量池有何不同? 例如:
Double d1=7.2;
Double d2=7.2;
System.out.println(d1==d2);//false
【问题讨论】:
-
常量池中只保存常用的值。长值比小整数少得多,而且在使用双精度值方面根本没有共同的模式。
-
因为
Longs和Doubles很多? -
有 2 个可能的布尔值。从 -128 到 127 的范围内有 256 个整数。在这个范围内有多少个双精度数?对许多人来说,选择经常使用的值以便缓存它们并不是一件容易的事。
-
您的双打示例不一定是这种情况。 API 允许 "(cache) frequently requested values" 的值。
标签: java