Подтвердить что ты не робот

Терминальные ограничения для операторов

Скажем, мы имеем следующий оператор if:

int a = 1;
int b = 2;

if(a < b) {
    System.out.println("A is less than B!");
}
else {
    System.out.println("A is greater or equal to B!");
}

Мне было интересно, что если тройной оператор заменяет оператор if, если оператор if состоит из одной строки кода в каждом подблоке (блоки if и else), то почему вышеприведенный пример невозможно написать так, как это происходит с тройным оператором?

(a < b) ? System.out.println("A is less than B!") : System.out.println("A is greater or equal to B!");
4b9b3361

Ответ 1

Вы можете использовать ? : только для выражений, а не для операторов. Попробуйте

System.out.println(a < b ? "A is less than B!" : "A is greater or equal to B!");

Примечание: это также короче/проще.

Ответ 2

Потому что он не заменяет оператор if.

Тернарный оператор работает только с выражениями , а не с операторами, сам по себе является выражением.

Поскольку это выражение, оно вычисляется, а не выполняется, и оно должно возвращать (не пустое) значение. Тип этого значения выводится из типов указанных двух необязательных выражений, а правила довольно сложные, с некоторыми неожиданные ошибки.

(Поэтому, как правило, я использую ?: только в самых простых ситуациях, чтобы код читался легко.)