定义:基本数据类型和包装类之间可以自动地相互转换
理解:装箱就是自动将基本数据类型转换为封装类型,拆箱就是自动将封装类型转换为基本数据类型。
自动拆箱装箱深度理解
内部逻辑:自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。
拿integer为例,他的自动装箱就是调用了valueOf()方法。
对return IntegerCache.cache[i + 128];理解
通过测试看到当数据大于127时,两个Integer类型数据进行对比时,得到的结果为false!!
两个引用型数据类型对此的时候当然为false
int与Integer对比为true
Integer integer100=null;
int int100=integer100;
会抛出异常,在第二行时,会对integer100进行拆箱,也就是对一个null对象执行intValue()方法,当然会抛出空指针异常。所以,有拆箱操作时一定要特别注意封装类对象是否为null。
还有
自动装箱有一个问题,那就是在一个循环中进行自动装箱操作的情况,如下面的例子就会创建多余的对象,影响程序的性能。
数据量小的时候没有影响,数据多的时候,影响很大