Java:println中的boolean(boolean?"print true":"print false")

Lut*_*her 15 java boolean

我遇到了这种语法:

System.out.println(boolean_variable ? "print true": "print false");
Run Code Online (Sandbox Code Playgroud)
  • 这个语法有两个点:叫做?
  • 我在哪里可以找到有关它的信息?
  • 它是否仅适用于布尔值,还是以其他不同的方式实现?

Jon*_*eet 55

? :条件运算符.(它不仅仅是:部分 - 整个方法参数是示例中条件运算符的一种用法.)

它通常被称为三元运算符,但这只是其本质的一个方面 - 有三个操作数 - 而不是它的名字.如果将另一个三元运算符引入Java,则该术语将变得模糊不清.它被称为条件运算符,因为它有一个条件(第一个操作数),然后它决定评估其他两个操作数中的哪一个.

第一操作数进行评估,然后要么在第二第三操作数基于所述第一操作数是真还是假评价...和作为操作者的结果是结束.

所以像这样:

int x = condition() ? result1() : result2();
Run Code Online (Sandbox Code Playgroud)

大致相当于:

int x;
if (condition()) {
    x = result1();
} else {
    x = result2();
}  
Run Code Online (Sandbox Code Playgroud)

重要的是它评估其他操作数.所以,例如,这很好:

String text = getSomeStringReferenceWhichMightBeNull();
int usefulCharacters = text == null ? 0 : text.length();
Run Code Online (Sandbox Code Playgroud)

  • @rajesh:是的,就像"二元+运算符"和"一元+运算符":)一样 (4认同)

jlo*_*rdo 20

它是条件运算符,通常称为三元运算符,因为它有3个操作数:例如:

int foo = 10;
int bar = foo > 5 ? 1 : 2; // will be 1
int baz = foo > 15 ? 3 : 4; // will be 4
Run Code Online (Sandbox Code Playgroud)

因此,如果boolean表达式求值为true,它将返回第一个值(冒号前),否则返回第二个值(冒号后).

您可以阅读Java语言规范,第15.25节"条件运算符"中的细节?

  • 同样重要的是要注意:未评估未使用的表达式.表达式`x!= null?x.Method():当x为null时,0`不会触发空引用异常.与三元运算符完全相同的函数相比,这是一个重要优势,因为所有传递给函数的参数都会被评估. (4认同)