在阿里泰山版的java开发手册中提到关于三目运算符需要注意的问题
Double a = null;
// 这句会抛出NPE异常
Double b = 1 == 2 ? 0d : a;
System.out.println(b);
解决方式:
Double a = null;
// 都为引用类型,不会抛出异常了
Double b = 1 == 2 ? Double.valueOf(0d) : a;
System.out.println(b);
问题原因是,当有基本类型和引用类型时,引用类型会拆箱成基本类型,那么就会出现下面这种的情况:
// 在拆箱中会出现这么句代码,导致报错
null.doubleValue();
所以,三目运算符的第二,第三操作符都采用引用类型可以避免NPE的情况。