Возврат 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() метод), которыйделает выдать ошибку во время компиляции! Почему?

Ответы на вопрос(8)

Ваш ответ на вопрос