Integer是int的包装类,int的初值为0,Integer的初值为null。
当对Integer类型跟int类型的变量进行比较大小时:
public static void main(String[] args) {
int a=59;
Integer b=59;
Integer b1=59;
Integer c=Integer.valueOf(59);
Integer c1=Integer.valueOf(59);
Integer d=new Integer(59);
System.out.println("int a跟Integer(不论是否为new) a==b "+(a==b));
System.out.println("int a跟Integer(不论是否为new) a==c "+(a==c));
System.out.println("int a跟Integer(不论是否为new) a==d "+(a==d));
Integer e=new Integer(59);
System.out.println("两个new 出来的Inetger变量 d==e "+(d==e));
System.out.println("非new出来的Integer变量(-128到127) b==c "+(b==c));
System.out.println("非new出来的Integer变量(-128到127) b==b1 "+(b==b1));
System.out.println("非new出来的Integer变量(-128到127) c==c1 "+(c==c1));
Integer f=128;
Integer f1=128;
Integer g=Integer.valueOf(128);
Integer g1=Integer.valueOf(128);
System.out.println("非new出来的Integer变量(>127||<-128) f==g "+(f==g));
System.out.println("非new出来的Integer变量(>127||<-128) f==f1 "+(f==f1));
System.out.println("非new出来的Integer变量(>127||<-128) g==g1 "+(g==g1));
Integer h=128;
Integer i=Integer.valueOf(128);
Integer j=new Integer(128);
System.out.println("Integer 跟 new Integer h==j "+(h==j));
System.out.println("Integer 跟 new Integer i==j "+(i==j));
}
1、Integer类型的变量跟int类型的变量进行==的比较的时候,无论Integer类型的变量是否是一个new 的Integer对象,只要他们的数值相等,都为true。因为当Integer类型的变量跟int类型变量比较时,Integer类型变量会被拆箱成int类型,仅仅比较数值。
2、当两个Integer变量都是new 出来Integer类型的引用对象时,不管数值是否相等,都为false。因为引用类型变量之间的比较,比较的是地址而不是数值。
上述两种情况适用于所有情况。不需要考虑Integer变量的数值是否 >=-128&&<=127
3、两个不是实例化new出来的Integer变量,在变量值>=-128&&<=127时,为true。否则为false
4、非new出来的Integer变量跟new 出来的Integer变量不管数值是否一样,比较时都为false; 因为非new 的Integer变量指向Java常量池对象;new出来的Integer变量指向Java堆中的新建对象