为什么下面的代码返回NullPointerException

时间:2015-11-05 15:51:39

标签: java autoboxing

下面的代码抛出NullPointerException,但我不明白为什么,该对象不为空。

public class A{
    int GetValue()
    {
        return (true ? null : 0);
    }

    public static void main(String[] args)  {
        A obj= new A();
        obj.GetValue();
    }
}

1 个答案:

答案 0 :(得分:3)

因为它是unboxing null int

(true ? null : 0); // returns null always

返回值为int,将null转换为int会引发NPE

当您的方法返回基元时,您需要确保该值永远不会null。您可以通过返回Integer

来解决此问题
Integer GetValue() // allows nulls
{
    return (true ? null : 0);
}

但是再次来电者可能会失败

int x = GetValue(); //fails

返回Optional会更好。