链式if构造函数在Java中做什么?

时间:2018-10-30 20:25:23

标签: java if-statement chained

通过阅读Oracle iLearning Java课程,我给人的印象是,使用“链式if构造”等同于使用“ &&”运算符。所以:

 if((5 < 10) && (5 < 6)) {
    run some code;
}

与以下相同:

if(5 < 10) {
  if(5 < 6) {
        run some code;
    }
}

将两者进行比较,我很难相信。我觉得我很误会。

5 个答案:

答案 0 :(得分:5)

我们可以将此代码重写为:

if(someCondition)` {
    if(otherCondition) {
        //code
    }
}

因此someConditionotherCondition都必须为true,才能运行//code。 (关键字AND)。因此,在这种情况下,if(someCondition && otherCondition)等同于上面的代码


通常,您使用嵌套if的原因是要检查多个条件,例如:

if(someCondition) {
   if(otherCondition1) {
      //code
   }
   else if(otherCondition2) {
     //code
   } else {
     //else
   }
}

答案 1 :(得分:0)

如果您不了解幕后发生的事情,JDK会提供一个非常强大的工具,称为 javac 。只需编译这两个类并比较它的字节码(这次我为您做了)。所以第一个

public class YouCantAvoidNullPointerLikeThat {
    public static void main(String[] args) {
        if((5 < 10) && (5 < 6)) {
            //run some code;
        }
    }
}

为您提供此字节码

javap -c YouCantAvoidNullPointerLikeThat.class
Compiled from "YouCantAvoidNullPointerLikeThat.java"
public class YouCantAvoidNullPointerLikeThat {
  public YouCantAvoidNullPointerLikeThat();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: return
}

还有下一个示例:

public class YouCantAvoidNullPointerLikeThat {
    public static void main(String[] args) {
        if(5 < 10) {
            if(5 < 6) {
                //run some code;
            }
        }
    }
}

给你像这样的字节码

javap -c YouCantAvoidNullPointerLikeThat.class
Compiled from "YouCantAvoidNullPointerLikeThat.java"
public class YouCantAvoidNullPointerLikeThat {
  public YouCantAvoidNullPointerLikeThat();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: return
}

是的,这2个结果相等

答案 2 :(得分:0)

您的示例是等效的:

第一:

if (someCondition && otherCondition) {
     //some code
}

第二:

if (someCondition) {
     if(otherCondition) {
        //some code
     }
}

第二个示例称为可折叠的“ if”语句,应将其合并为第一个示例以提高代码的可读性。

Sonar: rule about "collapsible if statements"

答案 3 :(得分:0)

这两种方式相似,但并不相同。让我们考虑一下单独的情况:

在第一种情况下,使用and运算符,您将:

if(conditionOne && conditionTwo){
   //do something if both conditions are true
}

在另一种情况下,您有:

if(conditionOne){
   if(conditionTwo){
      //do something of both conditions are true
   }
   //here you know that condition one is true but condition two is false
}

您会注意到,第二种方法将使您有可能直接处理更多案件,而第一种方法无法立即处理。

答案 4 :(得分:0)

显然,每天有5少于6和10,因此在两种情况下都将执行代码,因为可以用

替换条件
 if(true)

或将其删除