Возврат null в виде int разрешен с тернарным оператором, но не в операторе if
Давайте посмотрим на простой код Java в следующем фрагменте:
public class Main {
private int temp() {
return true ? null : 0;
// No compiler error - the compiler allows a return value of null
// in a method signature that returns an int.
}
private int same() {
if (true) {
return null;
// The same is not possible with if,
// and causes a compile-time error - incompatible types.
} else {
return 0;
}
}
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.temp());
System.out.println(m.same());
}
}
В этом простейшем коде Javatemp()
Метод не выдает ошибку компилятора, даже если возвращаемый тип функцииint
и мы пытаемся вернуть значениеnull
(через заявлениеreturn true ? null : 0;
). При компиляции это, очевидно, вызывает исключение во время выполненияNullPointerException
.
Однако, похоже, что то же самое неправильно, если мы представляем троичный оператор сif
заявление (как вsame()
метод), которыйделает выдать ошибку во время компиляции! Почему?