Java:在println中使用布尔值(布尔值?“打印true”:“打印false”)

15

我遇到了这个语法:

System.out.println(boolean_variable ? "print true": "print false");
  • 这个带有两个点 : 的语法叫什么?
  • 我在哪里可以找到相关信息?
  • 它只适用于布尔值还是还有其他实现方式?

它通常被称为“三元操作/运算符”,三元 = 3。它是一个if-then-else表达式,并且可以被链接起来:x > 0.01 ? "positive" : x < -0.01 ? "negative" : "zero"。键入:boolean ? A : B将得到A和B的共同可能类。conditon? null :""的类型是字符串。 - Joop Eggen
11个回答

55
? :条件运算符。在你的示例中,整个方法参数都是条件运算符的一个用法,而不仅仅是:部分。
通常称为三元运算符,但这只是它本质的一个方面 - 具有三个操作数 - 而不是它的名称。如果在Java中引入了另一个三元运算符,则术语将变得模糊不清。它被称为条件运算符,因为它具有一个条件(第一个操作数),然后确定评估哪个其他两个操作数之一。
首先评估第一个操作数,然后根据第一个操作数是真还是假来评估第二个或第三个操作数之一...那就是运算符的结果。
所以类似这样的东西:
int x = condition() ? result1() : result2();

大致等同于:

int x;
if (condition()) {
    x = result1();
} else {
    x = result2();
}  

重要的是它不评估其他操作数。所以例如,这样是可以的:

String text = getSomeStringReferenceWhichMightBeNull();
int usefulCharacters = text == null ? 0 : text.length();

一直以为它被称为三元运算符。如果您向下滚动链接,它也被称为“三元条件运算符?:”。 - rajesh
4
是的,就像有“二进制加运算符”和“一元加运算符”一样 :) - Jon Skeet
“is roughly equivalent to” 的意思是“大致相等”,为什么只是大致呢?你能说出其中的区别吗? - Roland
1
@Roland:对于这个精确的例子,我现在无法提供 - 尽管这并不意味着我没有想到其他情况。如果x的类型是Integer而不是intresult1()返回Integerresult2()返回int,那么将会有一个非常重要的区别:条件表达式的推断类型将是int而不是Integer,因此result1()的结果将被取消装箱然后重新装箱,这可能会导致空指针异常(NullPointerException)如果它返回null。正是这种微妙的细节让我写下“大致等价”来规避风险。 - Jon Skeet

20

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

int foo = 10;
int bar = foo > 5 ? 1 : 2; // will be 1
int baz = foo > 15 ? 3 : 4; // will be 4
所以,如果布尔表达式评估为true,则它将返回冒号前的第一个值,否则返回冒号后的第二个值。您可以在《Java语言规范》第15.25章中的条件运算符中阅读具体信息。

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

4

这是一个三元操作符,与许多其他运算符不同,它有三个操作数。具体可参考维基百科关于三元操作符的介绍以及在Java中的应用。简单来说:布尔运算(或变量)会被求值。如果它求值为真,那么操作符返回:之前的值/执行其代码,否则则返回:后面的值/执行其代码。


2

这是一个if语句。

问号左边的是条件,问号和冒号之间的是条件为真时的结果,冒号右边的是条件为假时的结果。


2

2
你所指的那篇文章提到 ?: 被称为条件运算符,而不是三元运算符。 - Panagiotis Kanavos

2
针对您的问题:
1. 问号加冒号(?:)被称为条件运算符(或三元运算符)。只有它们一起使用才有效。
2. 搜索Java三元运算符。
3. 它只适用于布尔值。
原则上,三元运算符是if/else的简写形式。布尔值将成为if的条件,?和:之间的部分是if分支,此后的部分是else分支。
请注意,条件运算符的返回类型由第一个分支确定。

1
这是三元运算符,它与布尔值一起使用。在某些情况下,它可以用作if-else的速记,但不应用于太复杂的事情,因为阅读可能会很困难。
一个例子是根据条件为变量赋值:
String message = doOperation() ? "Success" : "Error occurred";
System.out.println(message);

在这种情况下,如果doOperation返回一个布尔值来告知操作是否成功,要显示的消息可以在一行上进行赋值。请注意,此示例不代表良好的编程实践。

1

它的三元运算符。

三元运算符或 ? 是一个简写的 if else 语句。它可以用于评估表达式并根据表达式的结果返回两个操作数中的一个。

boolean b = true;
String s = ( b == true ? "True" : "False" );

这将根据布尔值b的值设置字符串s的值。这可以使用if else语句编写,如下所示:
boolean b = true;
String s;
if(b == true){
    s = "True";
}else{
    s = "False";
}

1

这是if-else语句的简写形式。

它的工作方式如下

(yourCondition ? STATEMENT1 : STATEMENT2)
  • 编译器检查条件。
  • IF 返回 TRUE,则执行 STATEMENT1
  • 否则执行 ELSE STATEMENT2

0

问号后跟着冒号(两个点)是一个三元运算符,通常被称为行内if。

在这种情况下,它根据布尔变量的值返回一个字符串。

http://en.wikipedia.org/wiki/%3F:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接