我已经按照提供的教程这里进行了操作,并在以下行中:
boolean t1 = false?false:true?false:true?false:true;
最终的
t1
的值是false。但我却将其评估为true。
第一个false得到true,而这个true又得到了false,进一步最终得到了true,
我对吗?不,我错了。
你能告诉我Java中如何评估三元表达式吗?我已经按照提供的教程这里进行了操作,并在以下行中:
boolean t1 = false?false:true?false:true?false:true;
t1
的值是false。但我却将其评估为true。
第一个false得到true,而这个true又得到了false,进一步最终得到了true,
我对吗?不,我错了。
你能告诉我Java中如何评估三元表达式吗??
字符时,它会寻找相应的 :
。在 ?
前的表达式是三元条件运算符的第一个操作数,表示条件。?
和 :
之间的表达式是运算符的第二个操作数,如果条件为真,则返回该值。:
后面的表达式是运算符的第三个操作数,如果条件为假,则返回该值。boolean t1 = false ? false : true?false:true?false:true;
first second third
operand operand operand
由于第一个操作数是假的,所以结果是第三个操作数 true?false:true?false:true
的值, 让我们来评估它:
true ? false : true?false:true;
first second third
operand operand operand
由于第一个操作数为真,所以结果是第二个操作数的值 - false
。
顺便提一下,第三个操作数 true?false:true
的值也是false
,因此无论x
的值如何,x?false:true?false:true
都将返回false。
boolean t1 = (false ? false : (true ? false : (true ? false : true)));
| | |
| | 1
| 2
3
理论上,这应该发生的是:
false
进行评估。true? false : false
,因此最终输出为false
。false ? false : false
,即false
。现在,让我们来技术性地讲述一下实际发生的:
false ?(不关心):(...)
->需要评估包含Exp 2和Exp 1的内部表达式。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;
false
;
boolean t1 = !false && (true ? false : true ? false : true);
,其结果始终为false
。 - Ousmane D.