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问题