总结
与和或的优先级是平级的,都是从左往右顺序执行
- “||” 左边为true:将后边所有判断式全部短路,不再执行后边的判断式
- “||” 左边为false: 继续执行后边的判断式,无短路。
- “&&” 左边为false:只短路下一个判断式,继续执行下下一个判断式**
- “&&” 左边为true:继续执行后边的判断式,无短路。
1. && 与
if(A 某运算符 B 某运算符 C && D 某运算符 E 某运算符 F…) {}
当C为false时,则短路D,即不执行D,执行E。
当C为true时,则继续执行D。
2. || 或
if(A 某运算符 B 某运算符 C || D 某运算符 E 某运算符 F…) {}
当C为false时,则继续执行D。
当C为true时,则短路后D、E、…后边所有的判断式,直接进入判断体内。
所以,诸君,就加个括号吧。
拿题练手
看这个题:https://leetcode.cn/problems/valid-parentheses/
如果这个题要求不能使用 除if语句之外 的括号,且 else if 只能使用一个,应该怎么写?(但估计也不会有**的要求。。)
应该这么写:
else if(stack.isEmpty() || c==')' && stack.pop()!='(' || c=='}' && stack.pop()!='{' || c==']' && stack.pop()!='[')
{
return false;
}
上边 else if() 的执行顺序:
先判断第一个stack.isEmpty()
是否成立(后边接的是 “||” 或运算符)
- 如果成立,则将后边所有判断式全部短路,不再执行后边的判断式;
- 如果不成立,则进行判断下一个判断式。
再判断第二个c==')'
是否成立,(后边接的是“&&” 与运算符)
- 如果成立,则进行判断下一个判断式。
- 如果不成立,则将下一个判断式短路,执行下下一个判断式。
之后同理判断。