嵌套的if语句与替代代码结构(性能影响?)

时间:2013-07-26 05:12:47

标签: java performance if-statement conditional nested

我经常构造我的代码:

public void doSomething() {
    if (!condition1) {
        println("problem 1");
        return;
    }
    if (!condition2) {
        println("problem 2");
        return;
    }
    if (!condition3) {
        println("problem 3");
        return;
    }

    // code to run if
    // everything is OK
}

而不是像这样嵌套:

public void doSomething() {
    if (condition1) {
        if (condition2) {
            if (condition3) {
                // code to run if
                // everything is OK
            }
            else {
                println("problem 3");
            }   
        }
        else {
            println("problem 2");
        }
    }
    else {
        println("problem 1");
    }

}

一个人对另一个人有什么好处吗?一个比另一个更“正确”吗?谢谢!

4 个答案:

答案 0 :(得分:1)

您应该对您的代码进行分析,并在大多数情况下查看哪种情况属实。如果每个条件的真实次数存在显着差异,那么请务必使用第一个结构,安排代码以利用特定于域的输入。这可能会为您带来一些显着的性能优势。

答案 1 :(得分:0)

每当我看到多个if时,我想到移动到switch语句,以获得更多的可读性......并避免多次重复......如果有话....

答案 2 :(得分:0)

if(condition1){

} else if(condition2){

} else if(condition3){

} else {

}

或使用switch语句。这里没有显着的性能优势。使用在您的情况下更具可读性/适合性的那个。我应该补充的另一件事是,在某些情况下,switch语句更快,因为if..else你将检查不同的子句,直到它达到一个匹配或根本没有匹配。

答案 3 :(得分:0)

任何一种代码结构都可以,但是有多个return语句在调试时会增加另一层复杂性,并且在键入和/或编辑代码时更容易出错。