Возврат 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());
    }
}

В этом простейшем Java-коде метод temp () не выдает ошибку компилятора, даже если тип возвращаемого значения функции int , и мы пытаемся вернуть значение null (через оператор return true? null: 0; ). При компиляции это, очевидно, вызывает исключение времени выполнения NullPointerException .

Однако похоже, что то же самое неверно, если мы представим тернарный оператор с помощью оператора if (как в методе same () ), который делает выдает ошибку времени компиляции! Почему?

185
задан Raedwald 1 January 2019 в 08:39
поделиться