2015-11-05 2 views
0

Код ниже бросает NullPointerException, но я не понимаю, почему объект не является нулевым.Почему код ниже возвращает NullPointerException

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

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

Какой объект? Вы имеете в виду нулевую ссылку «Integer», которую вы распаковываете, чтобы вернуть «int»? –

ответ

3

Потому что unboxingnull в 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 бы лучше исправить.

Смежные вопросы