优化java中的变量检查

时间:2015-04-16 06:51:03

标签: java

我最近一直在进行编码练习,这是我解决其中一个问题的方法

public boolean makes10(int a, int b) {
  return (a == 10 || b == 10 || a+b == 10);
  } 

代码本身有效,但我想知道这个代码是否可以进一步优化,因为2变量(a和b)都检查它们是否等于相同的值。我指的是a == 10 || b == 10

1 个答案:

答案 0 :(得分:2)

当if块中的第一个条件返回为true时,它不会移动到下一个条件true || false = truetrue || true = true,即,如果第一个参数为true,则第二个参数未被评估,因为那么整个表达必须是真的。因此,就优化而言,您目前的代码很好。 该行为称为short circuit evaluation

来自docs

  

||运算符就像| (§15.22.2),但评估其右手   操作数仅在其左侧操作数的值为false时。 [...] 在   运行时,首先评估左侧操作数表达式; [...]   如果结果值为true,则条件的值为   表达式为true,右侧操作数表达式不为   评估。如果左侧操作数的值为false,则为   评估右手表达; [...]结果值变为   条件或表达式的值。因此,||计算相同   结果为|在布尔或布尔操作数上。它的不同之处仅在于此   右边的操作数表达式是有条件地评估的   而不是一直。