【发布时间】:2014-04-14 11:55:00
【问题描述】:
我用JAVA写了如下代码,
Integer i=10;
Integer i1=10;
s.o.pln(i==i1);//true
Integer j=100;
Integer j1=100;
s.o.pln(j==j1);//true
Integer k=1000;
Integer k1=1000;
s.o.pln(k==k1);//false
这里,由于 Integer 是一个包装类,它必须对所有声明的类型都显示为真。 但它显示 1000 为 false。
谁能解释一下背后的原因。
【问题讨论】:
-
这是因为,如果我没记错的话,JRE(至少是 Oracle 的)缓存了 -128 到 127 之间的所有
Integers 或类似的东西 -
“它必须对所有声明的类型都显示为真”绝对不是。
Integer不是int。你在这里做的是比较references。 当且仅当等于运算符的一个成员是int时,Integer将被“自动拆箱”到 int。试试int k1 = 1000;。
标签: java class integer wrapper variable-declaration