我最近一直在进行编码练习,这是我解决其中一个问题的方法
public boolean makes10(int a, int b) {
return (a == 10 || b == 10 || a+b == 10);
}
代码本身有效,但我想知道这个代码是否可以进一步优化,因为2变量(a和b)都检查它们是否等于相同的值。我指的是a == 10 || b == 10
答案 0 :(得分:2)
当if块中的第一个条件返回为true时,它不会移动到下一个条件true || false = true
和true || true = true
,即,如果第一个参数为true,则第二个参数未被评估,因为那么整个表达必须是真的。因此,就优化而言,您目前的代码很好。
该行为称为short circuit evaluation
来自docs:
||运算符就像| (§15.22.2),但评估其右手 操作数仅在其左侧操作数的值为false时。 [...] 在 运行时,首先评估左侧操作数表达式; [...] 如果结果值为true,则条件的值为 表达式为true,右侧操作数表达式不为 评估。如果左侧操作数的值为false,则为 评估右手表达; [...]结果值变为 条件或表达式的值。因此,||计算相同 结果为|在布尔或布尔操作数上。它的不同之处仅在于此 右边的操作数表达式是有条件地评估的 而不是一直。