我用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是一个包装类,它必须对所有声明的类型显示true。但对于1000,它显示为false。
有人能解释一下背后的原因吗?
发布于 2014-04-14 20:09:00
首先,请注意,当应用于对象(如整数)时,==运算符会比较引用。
接下来,请注意,这些赋值意味着从int (基本类型)到Integer (对象)的装箱转换(也称为“自动装箱”)。
根据Java Specification - Conversions的说法
“如果要装箱的值是...一个介于-128和127之间的整数或短数,则让r1和r2是p的任意两个装箱转换的结果。r1 == r2。”
https://stackoverflow.com/questions/23059445
复制相似问题