java – 带有null Long的三元表达式中的NullPointerException

为什么以下代码行会产生NullPointerException?

Long v = 1 == 2 ? Long.MAX_VALUE : (Long) null;

我知道取消装箱正在执行null,但为什么呢?

注意

Long v = (Long) null;

不会产生异常.

解决方法:

所以看起来很明显,如果条件为真,你只需要装箱,如果条件为假则不应该装箱.但是,三元运算符表达式必须具有特定的静态类型.所以我们有很长很长的路要走. JLS声明结果将是原始的(同样 – 如果运算符是,比如说,甚至是=).因此三元运算符将强制取消装箱,然后才能进行分配.

如果你要使用等效的if-else替换代码,那么你只需要从long到Long以及从Long到Long的赋值,这将不会有任何拆箱,因此运行正常.

Bliv& amp; Gafter的Java Puzzlers.

上一篇:java-getReadableDatabase()上的NullPointerException


下一篇:通过Selenium运行testcase时的java.lang.NullPointerException