1.Integer是int的包装类,int则是java的一种基本数据类型。
2.Integer变量必须实例化后才能使用,int则不需要。
3.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值。
4.Integer的默认值为null,int的默认值是0。
5.int等基本类型的变量存储在栈中。
5.Integer和int的对比,如下图所示:
//程序如下所示
int a = 10;
int b = 10;
Integer c = 10;
Integer d = 10;
Integer e = new Integer(10);
Integer f = new Integer(10);
Integer g = 1000;
Integer h = 1000;
System.out.println("int和int比较值:-----" + (a == b));
System.out.println("int和Integer比较值:-----" + (a == c));
System.out.println("Integer和Integer小于128比较值:-----" + (c == d));
System.out.println("Integer和New Integer()比较值:-----" + (c == e));
System.out.println("New Integer()和New Integer()比较值:-----" + (f == e));
System.out.println("Integer和Integer大于127比较值:-----" + (g == h));
System.out.println("int和New Integer()比较值:-----" + (a == e));
//结果如下所示:
int和int比较值:-----true
int和Integer比较值:-----true
Integer和Integer小于128比较值:-----true
Integer和New Integer()比较值:-----false
New Integer()和New Integer()比较值:-----false
Integer和Integer大于127比较值:-----false
int和New Integer()比较值:-----true
(1)int和int比较:
int直接存储的数据值,因此直接比较值即可。
(2)int和Integer的比较:
Integer和int比较的时候自动拆箱,这是比较值即可。
(3)Integer和Integer的比较:
Integer是包装类型,是Object对象,因此==比较的是Integer指向的内存地址。然而-128~127直接的Integer数据直接缓存进入常量池,所以这个区间的比较返回true,其他区间返回false。当然,new的Integer对象不适用。
6、自动装箱和自动拆箱:
基本数据类型包括byte,char,short,int,long,float,double,boolean,对应的包装类型有Byte,Character,Short,Integer,Long,Float,Double,Boolean类型。基本类型变为包装类型就是自动装箱,反之就是自动拆箱,下面是具体场景。
Integer i = 100; //自动装箱,类似于Integer i = Integer.valueOf(100);
int j = i; //自动拆箱,类似于int j = i.intValue();