Java条件运算符三种可能的结果

Java Conditional operator three possible results

如何将您在下面看到的条件代码分解为常规 if 语句以了解其工作原理,因为它具有三个结果。

我更改值只是为了看看它的走向:

System.out.print(("A"=="A")?("B"=="B")?"1":"2":"3");


 /*
 if A is False (Output = 3)
 if B is False (Output = 2)
 if A&B are True (Output = 1)
 */

条件(三元)运算符的工作方式如下:

(predicate) ? (onTrueValue) : (onFalseValue);

所以在你的情况下我们有:

("A"=="A" ? ("B"=="B" ? "1" : "2") : "3");

计算结果为:

Is A equal to A? 
If yes -> return Is B equal to B
    If yes -> return 1;
    If no -> return 2;
If no -> return 3;

类似于:

condition1 ? (condition2 ? val1 : val2) : val3;

以及一些验证测试

// Prints 1 as both conditions are true.
System.out.println("A"=="A" ? ("B"=="B" ? "1" : "2") : "3");
// Prints 3 as first condition fails.
System.out.println("A"=="notA" ? ("B"=="B" ? "1" : "2") : "3");
// Prints 2 as second condition fails.
System.out.println("A"=="A" ? ("B"=="notB" ? "1" : "2") : "3");

另请注意,您正在使用 == 运算符来比较字符串。在这种特殊情况下,这不会有任何区别,请谨慎使用...

您的代码可以这样拆分:

String message;
if ("A" == "A") {
    if ("B" == "B") {
        message = "1";
    } else {
        message = "2";
    }
} else {
    message = "3";
}
System.out.print(message);

三元运算符的工作方式类似于 if 语句 returns 一个值。但是它只能是一个表达式可以站立的地方,所以它不能单独站立。 ? 之前的部分是条件,之后的部分是 then 表达式。 : 后面是else 表达式。 嵌套的三元 ?: 运算符非常难读,绝对应该避免。

如果我理解正确并且 A、B 和 C 是布尔值,这可能就是您想要的:

System.out.print( ((!A)? "3" : (!B)? "2" : "1"));

对于字符串,您必须确保使用 A.equals(B)。