说一个条件看起来像这样:
if (false && true)
//Code
它会在达到真实之前脱离条件,因为它是假的和&&永远不会是真的吗?
另外,如果你有这样的代码:
boolean dividesToTwo (int operand1, int operand2) {
if ((operand2 != 0) && operand1 / operand2 == 2)
return true;
return false;
}
它会按预期成功运行,还是会因为除零而得到错误? (如果第二个操作数为零)
答案 0 :(得分:3)
关于问题的第一部分,请参阅this answer。这称为短路评估:
&&
时,仅在第一部分为真时评估第二部分||
时,仅在第一部分为假时评估第二部分问题的第二部分:
是的,这将按预期工作!如果operand2
为零,评估将被取消,并且不会发生除零!
答案 1 :(得分:1)
是的,如果(false&& true)被评估,当看到错误时,条件将不再从那里进行评估(即在它达到真之前)
但是如果它是一个OR(||)操作,它必须在确定它是真或假之前检查第二部分。
对于你的第二个问题,它将按预期运行。不会发生零分割。
答案 2 :(得分:0)
if ((operand2 != 0) && operand1 / operand2 == 2)
这意味着如果operand2!=0
因为&&
的行为而只发生除法。如果前半部分为真,那么只有后半部分执行。如果前半部分是false
,则不会执行下半部分。
其中第二个参数仅在第一个参数不足以确定表达式的值时执行或计算: