Java的自动封箱和自动拆箱
1.为啥要封箱
下边是我查阅资料的原因:
Java中的封箱指的是将基本数据类型转换为对应的包装类,例如将int类型转换为Integer类型。Java中的封箱有以下几个原因:
(1)泛型:Java中的泛型只能使用类,而不能使用基本数据类型。如果需要使用基本数据类型,就必须使用其对应的包装类进行封箱操作。
(2)为了方便操作:Java中的包装类提供了许多实用的方法,可以方便地进行数据操作。例如,Integer类提供了parseInt()方法,可以将一个字符串转换为整数。
(3)可以为null赋值:基本数据类型不能为null,但是包装类可以为null赋值。这在某些情况下非常方便,例如在数据库中存储空值时,可以使用包装类来表示。
然后用通俗的讲法说这个封箱和拆箱的意思就是,你这个基本数据类型,相当于散娄子薯片,你想卖给别人,那你就得整个包装袋,让人知道这是薯片,标注好对应信息之类的东西,比如原料啥的,类似于乐事薯片的包装袋,然后人家才能去买回来,打开袋子吃薯片,封箱和拆箱就是这么个过程。、
后边这个勾八东西应该还涉及到面试题,我先给它放这里,回头我再看(来自Java八股文):
6、什么是自动拆装箱 int和Integer有什么区别 难度系数:⭐
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。
装箱:将基本类型转换成包装类对象
拆箱:将包装类对象转换成基本类型的值
java为什么要引入自动装箱和拆箱的功能?主要是用于java集合中,List list=new ArrayList();
list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。
实现原理:javac编译器的语法糖,底层是通过Integer.valueOf()和Integer.intValue()方法实现。
区别:
Integer是int的包装类,int则是java的一种基本数据类型
Integer变量必须实例化后才能使用,而int变量不需要
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
Integer的默认值是null,int的默认值是0