2015-04-16 73 views
1

变量检查我最近浏览过工作codingbat练习,这是我对这个问题优化Java中

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

代码本身的工作原理,但我想知道如果这个代码可以从进一步优化的设计方案2变量(A和b)都检查它们是否等于相同value.I这里指的是a == 10 || b == 10

+2

不,这看起来很好。如果'a == 10'是'true',那么它后面的条件将不会被检查/评估 – TheLostMind

+0

我同意TheLostMind,短路是足够的优化。如果你觉得'a + b == 10'更频繁,就把它放在开始。 – Docteur

+0

@TheLostMind先把'a + b == 10'放在一起会更好。因此,如果广告总数达到10,那么它就不会检查其他广告,而不是“a = 6”和“b = 4”,然后最终到达最后一个广告。 – Shadow

回答

2

当您如果块返回true时不列入移动到下一个状态为true || false = truetrue || true = true即第一个条件,如果第一个参数是真的,那么第二个是没有评估的,因为整个表达式必须是真实的。所以就目前的优化而言,你现在的代码是没问题的。 行为被称为short circuit evaluation

docs

的||运算符就像| (§15.22.2),但只有在其左侧操作数的值为假时,才会评估其右侧的 操作数。 [...]在 运行时,首先评估左侧操作数表达式; 如果结果值为真,则条件或 表达式的值为true,并且右边的操作数表达式不是 求值。如果左侧操作数的值为假,则评估右侧表达式;结果值变成 条件或表达式的值。因此,||计算与|相同的 结果在布尔操作数或布尔操作数上。它的区别仅在于, 右边的操作数表达式有条件地被评估,而不是总是被评估为 。