2010-11-09 55 views
6

谈论java性能..有什么更好?的if..else或多个简单,如果有什么更好?如果.. else或多个简单如果

if(condition) { 
    some_code; 
    return value; 
} 
else if(condition) { 
    some_code; 
    return value; 
} 
else if(condition) { 
    some_code; 
    return value; 
} 
else { 
    some_code; 
    return value; 
} 
在您的想法

日Thnx

if(condition) { 
    some_code; 
    return value; 
} 

if(condition) { 
    some_code; 
    return value; 
} 

if(condition) { 
    some_code; 
    return value; 
} 

some_code;  
return value; 

兴趣!

+0

如果存在性能差异,则可能忽略不计。 – 2010-11-09 22:48:35

+4

我不是专家,但如果有任何区别,我会感到惊讶 - 但所有表现问题的答案是“自己尝试一下,看看”。 (另一个答案是“这可能不是你的瓶颈。”)这看起来像一个*风格问题。 – Cascabel 2010-11-09 22:49:04

+0

不管“some_code”,只有java如何执行“if”语句 – dnlmax 2010-11-09 22:52:48

回答

16

没有区别,性能明智。选择最易读的选项,这可能取决于代码的功能。

一般不用担心这些微观优化。只有在确定存在需要修复的性能问题后,才能进行优化。

“我们应该忘记小效率,比如约97%的时间:premature optimization是万恶之源。” — Donald Knuth

+3

+1为“不要担心μ-opt” – 2010-11-09 22:51:05

+2

jeje,很棒的报价! – dnlmax 2010-11-09 22:59:43

0

我相信单个if会更好,因为无论何时遇到真实情况,它都可以安全地跳过其他else替代品,因为它们不会被执行。如果您使用多个if,则无论如何都必须对所有后续条件进行评估(即使像我认为的那样,它们将是互斥的)。

+0

但在这个例子中,它们不会被执行,因为函数在到达之前返回。 – 2010-11-09 22:50:55

+0

反正这个例子并没有什么不同,因为每个'if'主体都有一个'return'语句。 – 2010-11-09 22:51:09

+0

但无论如何,由于'返回'构造形式,它可以做到这一点。 – 2010-11-09 22:51:29

1

如果这个函数没有返回值,那么你给出的if ... else例子不需要return。在那种情况下,if ... else会更容易阅读。

此外,if ... else应该是首选的,因为它明确指出这些情况是相互排斥的。

如果这里存在性能差异,那么你的编译器/解释器很糟糕。

+0

如果存在性能差异,那么编译器很糟糕。 – starblue 2010-11-10 06:45:38

+0

对于解释型语言,可能是解释器。 – uckelman 2010-11-10 09:09:01

0

取决于情况。

如果条件相互排斥,请使用else。这将导致Java不检查发现为真的条件之后的任何条件。

如果它们不相互排斥,那么使用if的列表而没有其他可能导致多个情况发生。

就你的情况而言,每个回报都会带来相同的性能,因为无论如何都需要进行相同数量的比较。

+0

条件是否相互排斥并没有什么区别。 (如果每个'then'条款都没有返回,那么这将会产生...) – 2010-11-09 23:33:34

0

我不担心代码的可读性和可维护性。如前所述,代码编译后的性能基本相同。

我倾向于更加明确我的情况,而不是让行为隐含地“落下”。

另外,单个if将不会被评估为比if if更快。如果情况属实,则不会检查其他路径。