什么是问号"?" 和冒号":"运算符用于?

Dee*_*end 126 java operators ternary-operator conditional-operator

关于使用问号的两个问题"?" 和打印函数括号内的冒号":"运算符:它们做了什么?此外,是否有人知道他们的标准术语或我可以在哪里找到有关其使用的更多信息?我读过它们与'if''else'语句类似.

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();
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 279

这是三元条件运算符,可以在任何地方使用,而不仅仅是print语句.它有时被称为"三元运算符",但它不是唯一的三元运算符,只是最常见的运算符.

以下是维基百科展示其工作原理的一个很好的例子:

编写了C,Java和JavaScript中的传统if-else结构:

if (a > b) {
    result = x;
} else {
    result = y;
}
Run Code Online (Sandbox Code Playgroud)

这可以改写为以下语句:

result = a > b ? x : y;
Run Code Online (Sandbox Code Playgroud)

基本上它采取以下形式:

boolean statement ? true result : false result;
Run Code Online (Sandbox Code Playgroud)

因此,如果布尔语句为真,则获得第一部分,如果为假,则获得第二部分.

尝试这些,如果仍然没有意义:

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");
Run Code Online (Sandbox Code Playgroud)

  • 三元运算符指的是具有三个参数的任何运算符,因此这是*a*三元运算符而不是**三元运算符.主要语言(C#,Java,PHP)认为它是*a*条件运算符,并将其称为*?*:运算符.偶尔(JavaScript)它被称为**条件运算符. (7认同)

fmu*_*car 9

这是一个if/else声明等于

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


moo*_*moo 5

另外,尽管我会发布另一个相关问题的答案,

a = x ? : y;
Run Code Online (Sandbox Code Playgroud)

相当于:

a = x ? x : y;
Run Code Online (Sandbox Code Playgroud)

如果 x 为 false 或 null,则采用 y 的值。

  • 什么语言?不是在 Java 中。 (2认同)