1.区别
1.int是java的8大基本数据类型之一,Integer是引用数据类型,是int的包装类
2.使用Integer定义的变量需要初始化才能使用,而int类型的变量可以不用
3.在给变量初始化没给变量赋值的情况下,int的默认值是 0,Integer默认值是null
4.int类型直接存储变量的数值,Integer需要实例化对象,指向对象的地址。
2.int与Integer的 == 比较
2.1 new Integer()与new Integer()的==比较 false(new出来的是两个内存地址不同的对象
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b);
2.2 Integer与Integer的==比较
1.比较数值在[-128,127] 结果为true
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
2.不在区间[-128,127] 结果为false
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
3.源码分析
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
2.3 new Integer() 与Integer 的==比较结果为 false(两者的内存地址不同,使用new的Integer变量是指向堆区,而非new的变量地址是指向java常量池)
Integer a = new Integer(1);
Integer b = 1;
System.out.println(a == b);
2.4 int型与Integer(不管是new的还是非new的,只要比较的数值相等,就为true,Integer与int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
Integer a = new Integer(1);
int b = 1;
System.out.println(a == b);
Integer a = 1;
int b = 1;
System.out.println(a == b);
2.5 总结
1、new Integer()与new Integer() == 比较 结果:false
2、new Integer()与Intege == 比较 结果 :false
3、Integer 与 Integer== 比较
(1)比较值区间在[-128,127] 结果:true
(2)比较值区间不在[-128,127] 结果:false
4.Integer 与 int ,不管是new的还是非new的,只要比较的数值相等,就为true