我用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的错误。
有人能解释一下背后的原因吗?
首先,请注意,当应用于对象(如Integer)时,==运算符会比较引用。
接下来,请注意,这些赋值意味着从类型int(基元)到Integer(对象)的装箱转换(也称为"自动装箱")。
根据Java规范-转换
"如果装箱的值是…一个介于-128和127之间的整数或短数,那么让r1和r2是p的任意两个装箱转换的结果。通常情况下,r1==r2。"