Java中的三元表达式是如何计算的?
我已按照教程提供并符合以下要求:Java中的三元表达式是如何计算的?,java,conditional,ternary-operator,Java,Conditional,Ternary Operator,我已按照教程提供并符合以下要求: boolean t1 = false?false:true?false:true?false:true; t1的最终值为false。但我认为这是真的。 首先是假,然后是真,最后是真 我说得对吗?不,我错了。 请告诉我如何在java中计算三元表达式?当编译器找到一个?字符时,它会查找相应的:。?前面的表达式是表示条件的三元条件运算符的第一个操作数 ?和:之间的表达式是运算符的第二个操作数,如果条件为真,则返回其值 :后面的表达式是运算符的第三个操作数,如果条件为
boolean t1 = false?false:true?false:true?false:true;
t1的最终值为false。但我认为这是真的。
首先是假,然后是真,最后是真
我说得对吗?不,我错了。
请告诉我如何在java中计算三元表达式?当编译器找到一个
?
字符时,它会查找相应的:
。?
前面的表达式是表示条件的三元条件运算符的第一个操作数
?
和:
之间的表达式是运算符的第二个操作数,如果条件为真,则返回其值
:
后面的表达式是运算符的第三个操作数,如果条件为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
返回false,而不管x
的值是多少,我们都可以根据关联性规则重新组合这些操作
boolean t1 = (false ? false : (true ? false : (true ? false : true)));
| | |
| | 1
| 2
3
理论上,这是应该发生的事情
false
李>
true?false:false
因此最终输出为false
李>
false?false:false
,即false
现在,从技术上讲,这就是实际发生的情况:
true:false(不在乎)
因为我们已经确定了Exp 2的值,Exp 1不再需要计算false?(不在乎):false
,因此最终答案是false
下面的伪代码显示了表达式的计算方式:
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;
然后简化为:
boolean t1 = !false && (true ? false : true ? false : true);
boolean t1 = true && (true ? false : true ? false : true);
boolean t1 = true && false;
然后简化为:
boolean t1 = !false && (true ? false : true ? false : true);
boolean t1 = true && (true ? false : true ? false : true);
boolean t1 = true && false;
最终导致
错误
您的代码可以简化为booleant1=!假&(真?假:真?假:真)
始终为false
。请尝试使用括号/括号来简化此操作。对不起,请告诉我操作数是如何分隔的?i、 第一、第二和第三个操作数是什么。我是java语言的初学者。实际上,您在“Exp 1”中表示的内容根本没有经过计算。这是一段死代码。@Eran我试图对java初学者来说不要太过技术化。但我想这一点很重要。更新。