我得到了一个奇怪的空指针异常,我无法理解为什么.我用这个简单的测试代码缩小了它,它在第二行抛出一个NPE:
Long test = null;
Long result = true ? test : -1L;
虽然这段代码工作正常:
Long result = true ? null : -1L;
这很容易通过不使用内联条件语句来避免,但任何人都可以向我解释为什么会发生这种情况?
解决方法:
我认为这归结为拆箱.以下代码将起作用:
Long two = true ? test : new Long(-1);
如果一个参数只是-1,那么它将尝试取消框测试,因此它将两者都视为相同的类型.取消装箱null将导致空指针异常.如果它在语句中特别为null,那么它将足够聪明,不会尝试取消装箱.