Integer与Int的比较
Integer是int的包装类,int则是java的一种基本数据类型 。
Integer变量必须实例化后才能使用,而int变量不需要 。
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。
Integer的默认值是null,int的默认值是0。
Integer变量和int变量用比较时,只要两个变量的值是相等的,则结果为true。因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较(值相同就一样)。
Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理道 int 类型时非常有用的其他一些常量和方法,比如定义了表示整数的最大值和最小值的常量
Integer与Int的适用场景
int类型:绝大部分时候用int,用来进行一些加减乘除的运算or作为参数进行传递。
Integer:在泛型的时候必须用Integer。
比如List list = new ArrayList()可以 ,而List list = new ArrayList()则不行。因为像ArrayList,HashMap这些容器都是装object,向其中中放东西时,像int,double这种内建类型是放不进去的,这时就需要这些内建类型的外覆类了。然后就是声明对象时建议用Integer,声明一个变量时最好声明为对象格式,这样更能体现java面向对象的思想。
自动装箱和自动拆箱
装箱就是自动将基本数据类型转换为包装器类型;
拆箱就是 自动将包装器类型转换为基本数据类型。
日常开发中,靠这些基本数据类型几乎能够满足我们的需求,但是基本类型终究不是对象,往重了说不满足面向对象的开发思想,往轻了说就是使用不方便.我们知道,类的优点在于它可以定义成员变量、成员方法,提供丰富便利的功能,因此Java在JDK1.0的时候就设计了基本数据类型的包装类,而在JDK1.5中引入了新特性:自动装箱和拆箱。
Java数据类型
实现代码:
public static void main(String[] args)
{
int intValue = 100;
Integer boxValue = intValue;//自动装箱
int value = boxValue;//自动拆箱
}
反编译:
public static void main(String[] args) {
int intValue = 100;
Integer boxValue = Integer.valueOf(intValue);
int value = boxValue.intValue();
}
- 当把基本类型int直接等号赋值给Integer包装类的时候,实际上在编译过程中,编译器多做了一步额外的操作,就是反编译示例中的Integer.valueOf(intValue)。这一步就是自动装箱的语法糖,稍后我们进到该方法中继续探索。
- 而对应的,当把Integer直接等号赋值给int基本类型的时候,也是如此,编译器替我们执行了一步boxValue.intValue()操作。这一步就是自动拆箱的语法糖。
- 实际上,所谓的语法糖,自动装箱,拆箱都只是一个名词定义而已,不用纠结于名词本身,我们只关心原理。