Java流误解…;澄清一下?

Java流误解…;澄清一下?,java,class,integer,wrapper,variable-declaration,Java,Class,Integer,Wrapper,Variable Declaration,我已经用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为假 有人能解释一下它背后的原因吗。首先,请注意,当应

我已经用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为假


有人能解释一下它背后的原因吗。

首先,请注意,当应用于对象(如整数)时,==运算符比较引用

接下来,请注意,这些赋值意味着从int类型(原语)到Integer类型(对象)的装箱转换(也称为“自动装箱”)

根据

“如果要装箱的值是…一个介于-128和127之间的整数或短数字,则让r1和r2是p的任意两个装箱转换的结果。r1==r2的情况总是如此。”


这是因为,如果我没有弄错的话,JRE(至少是Oracle的)有一个介于-128和127之间的所有
Integer
s的缓存,或者类似的东西,“它必须对所有声明的类型显示为true”