1.自动拆装箱场景
自动装箱
当把字面量转换成包装类的时候会自动装箱
比如:
Integer a = 1;
Integer b = 1;
自动拆箱
当你对包装类的对象进行运算(如加法、减法等)时,Java会自动进行拆箱操作。拆箱是将包装类型的对象转换为相应的基本类型的过程。这使得你可以在使用包装类对象的地方进行运算,而无需显式地调用intValue()、doubleValue()等方法来获取基本类型的值。
当进行以下运算时,会自动触发拆箱操作:
- 运算符:
+,-,*,/,%,+=,-=,*=,/=,%= - 比较运算符:
==,!=,<,>,<=,>=
例如:
Integer a = 5; Integer b = 3; int result = a + b;// 自动拆箱,将a和b转换为int,然后进行加法运算 在这个例子中,a和b对象在参与加法运算时,会自动拆箱为int类型,然后进行加法操作,将结果赋给result变量。
需要注意的是,在包装类对象为null时,进行拆箱操作将会抛出NullPointerException。因此,如果你不确定对象是否为null,最好在进行拆箱操作之前先进行非空判断。
2.NPE问题的触发
一个场景
public Long getNum(){return null;}public void NPE(){long id = getNum();}
这个里面 long id = getNum() 实际运行就是
long id = getNum();
long id = getNum().longValue();
一个NULL值调用方法 就是触发NPE问题
还有一个场景

阿里巴巴开发手册里面提到的 这个三目运算符中也会触发NPE问题