Vic*_*aga 6 java memory integer
嘿,我想了解下面的代码片段.
public static void main(String[] args) {
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
}
Run Code Online (Sandbox Code Playgroud)
此方法运行所有println指令.那是i1!= i2是真的,但是i3 == i4.乍一看这让我觉得奇怪,它们应该是不同的参考.我可以弄清楚,如果我将相同的字节值(-128到127)传递给i3和i4,它们将始终等于引用,但任何其他值将使它们不同.
我无法解释这一点,您能指出一些文档或提供一些有用的见解吗?
谢谢
Joa*_*uer 12
int对Integer对象进行自动装箱值将使用缓存来表示常见值(正如您已识别出来的那样).这在JLS的§5.1.7拳击转换中指定:
如果该值
p被装箱是true,false,一byte,一个char范围内的\u0000到\u007f,或int或short之间数-128和127,然后让r1和r2是任何两个装箱转换的结果p.情况总是如此r1 == r2.
请注意,仅当语言为您或您使用时自动为某个值设置值时,才会应用此选项Integer.valueOf().使用new Integer(int)将始终生成一个新Integer对象.
次要提示:JVM实现也可以自由地缓存这些范围之外的值,因为没有指定相反的值.但是,我还没有看到这样的实现.
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |