我在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的错误。
有人可以解释其背后的原因。
答案 0 :(得分:2)
首先,请注意,当应用于对象(如Integer)时,==运算符会比较引用。
接下来,请注意这些分配意味着从int(primitive)类型到Integer(object)的装箱转换(也称为'autoboxing')。
根据Java Specification - Conversions
“如果被装箱的值是...... -128和127之间的int或短号,那么让r1和r2成为p的任意两次装箱转换的结果。总是r1 == r2的情况。“