Ответ 1
Вы можете использовать ? :
только для выражений, а не для операторов. Попробуйте
System.out.println(a < b ? "A is less than B!" : "A is greater or equal to B!");
Примечание: это также короче/проще.
Скажем, мы имеем следующий оператор 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!");
Вы можете использовать ? :
только для выражений, а не для операторов. Попробуйте
System.out.println(a < b ? "A is less than B!" : "A is greater or equal to B!");
Примечание: это также короче/проще.
Потому что он не заменяет оператор if
.
Тернарный оператор работает только с выражениями , а не с операторами, сам по себе является выражением.
Поскольку это выражение, оно вычисляется, а не выполняется, и оно должно возвращать (не пустое) значение. Тип этого значения выводится из типов указанных двух необязательных выражений, а правила довольно сложные, с некоторыми неожиданные ошибки.
(Поэтому, как правило, я использую ?:
только в самых простых ситуациях, чтобы код читался легко.)