java – 内联条件语句的空指针异常

我得到了一个奇怪的空指针异常,我无法理解为什么.我用这个简单的测试代码缩小了它,它在第二行抛出一个NPE:

Long test = null;
Long result = true ? test : -1L;

虽然这段代码工作正常:

Long result = true ? null : -1L;

这很容易通过不使用内联条件语句来避免,但任何人都可以向我解释为什么会发生这种情况?

解决方法:

我认为这归结为拆箱.以下代码将起作用:

Long two = true ? test : new Long(-1);

如果一个参数只是-1,那么它将尝试取消框测试,因此它将两者都视为相同的类型.取消装箱null将导致空指针异常.如果它在语句中特别为null,那么它将足够聪明,不会尝试取消装箱.

上一篇:java – android spinner NullPointerException


下一篇:java – 何时为构造函数抛出异常