短路与多个if

时间:2015-07-01 23:30:48

标签: java if-statement optimization short-circuiting

这有什么区别:

if(a && b)
{
     //code
}

和此:

if(a)
{
     if(b)
     {
          //code
     }
}

据我所知b只会在a为真时在第一个代码块中进行评估,而第二个代码块将是相同的。

使用一个优于另一个有什么好处吗?代码执行时间?记忆?等

4 个答案:

答案 0 :(得分:8)

它们被编译为相同的字节码。没有性能差异。

可读性是唯一的区别。作为一个巨大的概括,短路看起来更好,但嵌套稍微清晰。它真的归结为具体的用例。我通常会短路。

我试过这个。这是代码:

public class Test {

    public static void main(String[] args) {
        boolean a = 1>0;
        boolean b = 0>1;

        if (a && b)
            System.out.println(5);

        if (a)
            if (b)
                System.out.println(5);
    }
}

这编译为:

  0: iconst_1
  1: istore_1
  2: iconst_0
  3: istore_2
  4: iload_1
  5: ifeq          19
  8: iload_2
  9: ifeq          19
 12: getstatic     #2
 15: iconst_5
 16: invokevirtual #3
 19: iload_1
 20: ifeq          34
 23: iload_2
 24: ifeq          34
 27: getstatic     #2
 30: iconst_5
 31: invokevirtual #3
 34: return

注意此块重复两次:

  4: iload_1
  5: ifeq          19
  8: iload_2
  9: ifeq          19
 12: getstatic     #2
 15: iconst_5
 16: invokevirtual #3

两次都是相同的字节码。

答案 1 :(得分:4)

如果其他 相关联,则会有所不同。

if(a && b)
{
     //do something if both a and b evaluate to true
} else {
    //do something if either of a or b is false
}

和此:

if(a)
{
     if(b)
     {
          //do something if both a and b are true
     } else {
          //do something if only a is true
     }
} else {
     if(b)
     {
          //do something if only b is true
     } else {
          //do something if both a and b are false
     }
}

答案 2 :(得分:0)

如果您的第二个示例中的两个if语句之间没有任何内容,则第一个语句肯定会更清晰,更易读。

但如果有一段代码可以适合两者之间的条件那么只有第二个例子。

答案 3 :(得分:0)

不应该有区别,但在可读性方面,我更喜欢第一个,因为它不那么冗长,而且缩小了。