int与Integer的区别以及其自动装箱与自动拆箱

it2022-05-05  126

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。 Java 为每个原始类型提供了包装类型:

原始类型: boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 我们来理解下自动装箱与自动拆箱的概念:自动装箱:是将基本类型转换成包装类型自动拆箱:是将包装类型转换成基本类型 为什么要引入装箱与拆箱功能? 主要是用于java集合中,List list=new ArrayList(); list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。 class AutoUnboxingTest { public static void main(String[] args) { Integer a = new Integer(3); Integer b = 3; // 将3自动装箱成Integer类型 int c = 3; System.out.println(a == b); // false 两个引用没有引用同一对象 System.out.println(a == c); // true a自动拆箱成int类型再和c比较 } }

下面这是一个典型的自动装箱与拆箱的例子

public class Test03 { public static void main(String[] args) { Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2);//true System.out.println(f3 == f4);//false } }

由上例子可知,f1,f2,f3,f4都是Integer对象的引用,而==是比较的引用,如果整型字面量的值在-128到127之间,那么就不会new新的Integer对象,而是直接从常量池中取出,否者要重新new新的Integer对象,所以上面中第一个结果是true,而f3,f4不在-128~127之间按,所以重新new对象,f3与f4指向的不是同一个对象,所以结果为false.


最新回复(0)