Java基础补充 包装类
by
西瓜要挖着吃
·
Published 2020年6月16日
· Updated 2020年6月18日
什么包装类?
Java中万物皆对象,很多的特性都是针对于对象的,而基本数据类型就显得格格不入,无法参与转型、泛型、反射等操作,所以我们需要一个类将基本类型包装起来
什么是自动拆箱和装箱?
Integer i = new Integer(1); //Java 5 之前需要显式构造包装类对象
Integer j = 1;//自动调用Integer.valueOf(1)将数值转换为包装类对象--自动装箱
int k = j; //自动调用j.intValue()将j转换为数值--自动拆箱
什么时候会自动拆箱和装箱?—在需要的时候
这句话一点都不水,学习任何知识点都需要去思考,去理解,死记硬背不可取
Integer i = 300; //赋值右侧应为对象--装箱
i.equals(2);//参数应为对象--装箱
int j = i; //赋值右侧应为数值--拆箱
if (i == 300) System.out.println("拆箱"); //通过Integer特性可以判断为进行拆箱
i = i + 1; //进行加法运算时应为数值-拆箱 作为赋值右侧应为对象-装箱 先拆后装
注意
包装类中对应的数值都是private final,也就是说包装类的数值更改是需要重新构造对象的
自动装箱的内存复用(valueOf 的机制)
对Integer,自动装箱(调用valueOf(int))时若数值在[-128,127]之内时不会构造新对象,会复用已有对象,类似于String;Byte,Short,Long,Character机制类似
对Float,Double,Boolean来说没有这种机制,自动装箱就是创建新对象