自动装箱和拆箱
自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转化。JDK1.5以后Java引入了自动装箱(autoboxing)和自动拆箱(unboxing)
自动装箱:
基本数据类型处于需要对象的环境中时,会自动转为”对象“。例如:‘
Integer i= 5;相当于编译器自动执行Integer i= Integer,valueOf(5)
自动拆箱子:
每当需要一个值时,对象会自动转成基本数据类型,没必要再去使用intvalue()
自动装箱过程时通过包装类的valueOf()方法,而自动拆箱过程是通过调用包装类的xxxValue()方法实现的(xxx代表的时对应的基本数据类型,如intVlaue(),doubleValue()等
自动装箱拆箱实际上是编译器来帮的忙,编译器在编译时依据你所写的语法,来决定是否进行装箱或者拆箱动作。
/*
* 自动装箱/自动拆箱
*/
package com.wu.test;
public class AutoboxingUnboxing {
public static void main(String[] args) {
Integer i = 100;//自动装箱
// 相当于编译器自动为你做一下语法编译:
// Integer i = Integer.valueOf(100);调用的是valueOf(100),而不是new Integer(100);
int j = i;//自动拆箱
// 相当于编译器自动为你做一下语法编译:
// int j = i.intValue();
}
}
所以自动装箱和自动拆箱的功能是所谓的“编译器蜜糖(Complier Suger)”虽然使用这个功能很方便,但是在程序运行阶段得了解java的语义。
包装类空指针异常问题:
/*
* 测试包装类空指针异常
*/
package com.wu.test;
public class Test01 {
public static void main(String[] args) {
Integer i = null;
int j = i