JAVA三元运算符空指针引用的坑
有以下代码:
Long x = null; Long y = true ? x : 100L; System.out.println(y);
很多人以为会输出:null,其实会报空指针异常
原因是编译后包装类型会拆箱: Long y = true ? x : 100L; 反编译后变为:Long y = true ? x.longValue() : 100.longValue();
x为空对象,调用.longValue()自然会引用空指针异常
正确的代码:
Long x = null; Long y = true ? x : Long.valueOf(100); System.out.println(y);
将基本类型100L 改为 包装类型Long.valueOf(100),这样就不会发生拆箱,也就不会发生空指针引用。
希望大家使用三目运算符 且 两边类型不一致时,一定要引起注意!!!