我正在编写一个方法,我想知道附加的代码是否有效取决于它是如何编写的:
public boolean isThreeOfKind(PlayingCard[] hand)
{
// if(hand[0].getRank() == hand[2].getRank())
// return true;
// else if(hand[1].getRank() == hand[3].getRank())
// return true;
// else if(hand[2].getRank() == hand[4].getRank())
// return true;
return (hand[0].getRank() == hand[2].getRank() ||
hand[1].getRank() == hand[3].getRank() ||
hand[2].getRank() == hand[4].getRank());
}所以正如你所看到的,我有一个if else if语句被注释掉了,一个return语句基本上做了同样的事情,根据编码标准,哪一个会更有效?
发布于 2012-05-18 02:17:46
效率上没有区别,但风格上有明显的区别,第二个好得多。然而,这个特殊的逻辑实际上只是
for (int i = 0; i < 3; i++)
if (hand[i].getRank() == hand[i+2].getRank()) return true;
return false;发布于 2012-05-18 02:18:59
这种类型的问题在CodeReview上可能更好,因为它更多的是一种观点。但在我看来,阅读非注释部分要容易得多,在它成为一个问题之前(特别是在这样的情况下),性能不应该担心。有关这方面的更多信息,请参阅维基百科上的程序优化文章,特别是When to Optimize部分。
发布于 2012-05-18 02:26:16
正如Jeffery所说,在这种情况下,我会说可读性比效率更有价值(我不会说这是一个普遍规则)。
您可能会对名为Short-Circuit Evaluation的概念感兴趣。注意,在Java中,||是一个短路运算符。因此,如果第一个语句为真,您将获得与if语句相同的效果(不会计算其他两个语句)。
也就是说,我不确定这两段代码是否会编译成相同的函数(它们可能取决于编译器的实现)。如果它们不是向下编译相同的,第二个可能会更快。
https://stackoverflow.com/questions/10641253
复制相似问题