Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
我们知道Java有8种基本数据类型:
byte、char、short、int、long、float、double、boolean
而他们的封装类型对应为:
Byte、Character、Short、Integer、Long、Float、Double、Boolean
class Test{
public staitic void main(String [] arg){
Integer num1 = new Integer(3);
Integer num2 = 3; // 将3自动装箱成Integer类型
int num3 = 3;
System.out.println(num1 == num2); // false 两个引用没有引用同一对象
System.out.println(num2 == num3); // true num2自动拆箱成int类型再和num3比较
}
}
拆箱:将引用类型转换为值类型
装箱:将值类型转换为引用类型
区别:
class Test{
static Integer num1;
static int num2;
public static void main(String [] arg){
System.out.println(num1); //输出null
System.out.println(num2); //输出0
}
}
从以上代码中那我们可以看出:Integer的默认值是null,int的默认值是0:
我们再来看另一个实例:
class Test{
static Integer num1;
static int num2;
public static void main(String [] arg){
num1 = 0;
num2 = 0;
}
}
我们同时赋值0,由此可见,Integer可以区分未赋值和值为0的区别,int却无法表达出未赋值的情况。