今天刷力扣遇到的坑,三元表达式和||
组合在一起,发生了一个奇妙的BUG,让我找半天
这题
首先复习一下三元表达式
boolean?true:false
举个例子:
int i = true ? 1 : 2; //i为1
int j = false ? 1 : 2; //j为2
再复习一下||
运算(注意是||
不是|
)
总结来说就是遇真则真,全假才假
Boolean boo = false || true; //true
Boolean boo = true || false; //true
Boolean boo = false || false; //false
现在将两个东西合并
Boolean boo = true ? false : true || false || true;
理论上来说它应该是false || false || true ;最终结果应该是true
但是实际运行效果却不一样,它的结果居然是false。
就是这里给我坑了,仔细研究后我猜测,三元表达式的判断语句结果就是true,然后||
遇到true就直接为真,不再去进行后面的语句进行判断了。
为了验证猜测,我进行以下验证。它证明了我的猜想是正确的,它误将三元表达式判断的值当作了||
条件判断的值
解决办法
其实很简单,将三元表达式用括号包起来,他就不会发生误判了
image.png
网友评论