版权声明:本文为博主原创文章,未经博主允许不得转载。讨论交流群:59116211 https://blog.csdn.net/hao474798383/article/details/70257898
拿int类型来举例,从1.5之后引入自动拆装箱
//exp
public static void demo(){
Integer i = null;
int j = i;//这里会报空指针异常
System.out.print(j);
}
当把i的地址赋给基础类型的时候,虚拟机会自动拆箱i的值,直接写入到j的栈内存中,这时候调用拆箱方法>>>valueOf(),会引发nullpoint
从代码调试可以看出:装箱的过程为调用valueOf方法,在该方法中,首先判断值是否在常量池的表示范围,如果在,则返回常量池的对象 -128 ~ 127,如果不在,则new Integer();
拆箱的过程为:调用intValue方法,返回对象内存储的int值,注意,如果Integer的引用是null的话,拆箱的过程会引发nullpoint异常
在进行运算的时候,都为拆箱运算
拆箱和装箱都为虚拟机来进行操作