我已按照教程提供here并排成一行:
{{ Error["motherboard"]["socketError"] }}
t1的最终值为false。但我认为它是真的。 first false给出了true,而true给出了false,这最终给出了真实 我对吗?不,我错了。 请告诉我如何在java中评估三元表达式?
答案 0 :(得分:5)
当编译器找到?
字符时,它会查找相应的:
。 ?
之前的表达式是三元条件运算符的第一个操作数,表示条件。
?
和:
之间的表达式是运算符的第二个操作数,如果条件为真,则返回其值。
:
之后的表达式是运算符的第三个操作数,如果条件为false,则返回其值。
boolean t1 = false ? false : true?false:true?false:true;
first second third
operand operand operand
由于第一个操作数为false,结果是第三个操作数true?false:true?false:true
的值,所以让我们评估它:
true ? false : true?false:true;
first second third
operand operand operand
由于第一个操作数为true,结果是第二个操作数的值 - false
。
顺便说一句,第三个操作数true?false:true
的值也是false
,因此无论x?false:true?false:true
的值如何,x
都会返回false。
答案 1 :(得分:4)
我们可以根据相关性规则重新组合这些操作。
boolean t1 = (false ? false : (true ? false : (true ? false : true)));
| | |
| | 1
| 2
3
从理论上讲,这是应该发生的事情
false
。 true? false : false
所以最终输出为false
。 false ? false : false
,即false
。现在,为了获得技术,这就是实际发生的事情:
false ? (don't care) : (...)
- >需要评估包含Exp 2和Exp 1的内部表达式。true: false, (don't care)
由于我们已经确定了Exp 2的值,因此不再需要对Exp 1进行评估。false ? (don't care) : false
,因此最终答案为false
。答案 2 :(得分:1)
下面的伪代码显示了如何评估表达式:
boolean t1 = false?false:true?false:true?false:true
= true && (true ? false : true ? false : true)
= true && false
= false
另一种看待它的方式:
boolean t1 = false?false:true?false:true?false:true;
可以简化为:
boolean t1 = !false && (true ? false : true ? false : true);
然后简化为:
boolean t1 = true && (true ? false : true ? false : true);
然后简化为:
boolean t1 = true && false;
最终导致false
;