Вопрос по java – Для чего используется знак вопроса «?» И двоеточие «:» Оператор? [Дубликат]

113

This question already has an answer here:

Два вопроса об использовании знака вопроса "?" и двоеточие ":" оператор в скобках функции печати: что они делают? Кроме того, кто-нибудь знает стандартный термин для них или где я могу найти больше информации об их использовании? Я читал, что они похожи на «если». & APOS; остальное & APOS; заявление.

int row = 10;
int column;
while (row >= 1)
{
    column = 1;
    while(column <= 10)
    {
        System.out.print(row % 2 == 1 ? "<" : "\r>");
        ++column;
    }
    --row;
    System.out.println();
}
К вашему сведению: троичный оператор не является специфическим для Java. Colin D

Ваш Ответ

7   ответов
262

Этотроичный условный оператор, который можно использовать где угодно, а не только оператором print. Иногда его просто называют «троичным оператором», ноэто не единственный троичный операторпросто самый распространенный.

Вот хороший пример из Википедии, демонстрирующий, как это работает:

A traditional if-else construct in C, Java and JavaScript is written:

if (a > b) {
    result = x;
} else {
    result = y;
}

This can be rewritten as the following statement:

result = a > b ? x : y;

В основном это принимает форму:

boolean statement ? true result : false result;

Поэтому, если логическое утверждение истинно, вы получаете первую часть, а если ложно, вы получаете вторую.

Попробуйте это, если это все еще не имеет смысла:

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");
@Cleb. Теоретически нет никакой разницы, но компиляторы могут по-разному оптимизировать эти два утверждения (делая разные предположения относительно предсказания ветвлений). Большинству людей не нужно беспокоиться об этом уровне оптимизации, и если вы это сделаете, вы, вероятно, захотите использовать такие атрибуты, как__builtin_expect тем не мение.
@ Sheepy Спасибо, я обновил ответ.
Есть ли разница в производительности? Лично я нахожу классическую версию намного легче читать - особенно когдаx а такжеy опять вызовы функций.
Тернарный оператор относится к любому оператору с тремя параметрами, таким образом, этоa троичный оператор, но неthe троичный оператор. Основные языки (C #, Java, PHP) считают этоa условный оператор, и назовите егоthe ?: оператор. Иногда (JavaScript) это называетсяthe условный оператор.
2

Может быть, это может быть идеальным примером для Android, For example:

void setWaitScreen(boolean set) {
    findViewById(R.id.screen_main).setVisibility(
            set ? View.GONE : View.VISIBLE);
    findViewById(R.id.screen_wait).setVisibility(
            set ? View.VISIBLE : View.GONE);
}
0

Они называютсяthe ternary operator так как они единственные в Java.

Отличие от конструкции if ... else состоит в том, что они возвращают что-то, и это может быть что угодно:

  int k = a > b ? 7 : 8; 
  String s = (foobar.isEmpty ()) ? "empty" : foobar.toString (); 
1

Кроме того, хотя я и опубликовал ответ на другой вопрос, который у меня был,

a = x ? : y;

Эквивалентно:

a = x ? x : y;

Если x имеет значение false или ноль, то берется значение y.

Какой язык? Не на Яве.
Я работаю на Java, и да, это работает.
Извините, но это не работает в Java. Вы уверены, что не думаете, скажем, о PHP?
Это может быть, но не в Java.
Groovy имеет «оператор Элвиса» (?:), который ведет себя так, похож наC#Нулевой оператор объединения (??).
1

это троичный оператор и в простом английском это"if row%2 is equal to 1 then return < else return /r"

3
a=1;
b=2;

x=3;
y=4;

answer = a > b ? x : y;

answer=4 поскольку условие ложно, оно принимает значение y.

Знак вопроса (?)
, Значение, используемое, если условие истинно

Двоеточие (:)
, Значение, используемое, если условие ложно

8

Это оператор if / else, равный

if(row % 2 == 1){
  System.out.print("<");
}else{
  System.out.print("\r>");
}

Похожие вопросы