三元运算符限制

Ami*_* Al 12 java ternary-operator

假设我们遵循if语句:

int a = 1;
int b = 2;

if(a < b) {
    System.out.println("A is less than B!");
}
else {
    System.out.println("A is greater or equal to B!");
}
Run Code Online (Sandbox Code Playgroud)

我一直想知道如果三元运算符替换if语句if语句由每个子块中的一行代码(if和else块)组成,那么为什么上面的例子不可能用三元运算符这样写?

(a < b) ? System.out.println("A is less than B!") : System.out.println("A is greater or equal to B!");
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 21

您只能? :用于表达式,而不能用于语句.尝试

System.out.println(a < b ? "A is less than B!" : "A is greater or equal to B!");
Run Code Online (Sandbox Code Playgroud)

注意:这也更短/更简单.


biz*_*lop 7

因为它不会取代if声明.

三元运算符只适用于表达式而不是语句,它本身就是一个表达式.

因为它是一个表达式,所以它被计算而不是执行,并且它必须返回一个(非空)值.从指定的两个可选表达式的类型推断出该值的类型,并且规则相当复杂,带有一些意想不到的陷阱.

(因此,我通常只?:在最简单的情况下使用以保持代码易于阅读.)