什么是问号“?”和冒号“:”运算符用于什么? [重复]

问题描述 投票:0回答:7

关于使用问号“?”的两个问题和打印函数括号内的冒号“:”运算符:它们的作用是什么?另外,有谁知道它们的标准术语或者我可以在哪里找到有关其使用的更多信息? 我读到它们类似于“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();
}
java operators ternary-operator conditional-operator
7个回答
323
投票

这是三元条件运算符,它可以在任何地方使用,而不仅仅是打印语句。它有时简称为“三元运算符”,但它不是唯一的三元运算符,只是最常见的一个。

这是来自维基百科的一个很好的例子,展示了它是如何工作的:

用 C、Java 和 JavaScript 编写传统的 if-else 结构:

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

这可以重写为以下语句:

result = a > b ? x : y;

基本上采用以下形式:

boolean statement ? true result : false result;

因此,如果布尔语句为真,您将获得第一部分,如果为假,您将获得第二部分。

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

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");

10
投票

这是一个 if/else 语句,相当于

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

5
投票

虽然我会发布另一个相关问题的答案,

a = x ? : y;

相当于:

a = x ? x : y;

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


4
投票
a=1;
b=2;

x=3;
y=4;

answer = a > b ? x : y;

answer=4
由于条件为假,因此需要 y 值。

问号(?)
。条件为真时使用的值

冒号 (:)
。条件为 false 时使用的值


3
投票

也许它可以成为 Android 的完美示例, 例如:

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);
}

1
投票

它们被称为“三元运算符”,因为它们是 Java 中唯一的一种。 与 if...else 结构的区别在于,它们返回一些东西,而这个东西可以是任何东西:

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



1
投票
"if row%2 is equal to 1 then return < else return /r"

    

© www.soinside.com 2019 - 2024. All rights reserved.