Java条件运算符与示例

时间:2020-01-09 10:34:46  来源:igfitidea点击:

Java &&中有两个条件运算符(称为"条件与")和||。 (称为"条件或者")。 Java中的条件与(&&)和条件或者(||)运算符都对两个布尔表达式执行运算,并返回布尔值。

条件与-如果Java中的&&运算符是两个布尔表达式中的任何一个为false,则结果为false。以下表达式给出了条件AND运算符如何在Java中工作的想法。

真实&&真=真
真&&假=假
假&&真=假
假&&假=假

条件或者–如果|| Java中的运算符,如果两个布尔表达式中的任何一个为true,则结果为true。以下表达式给出了一个条件OR运算符如何在Java中工作的想法。

真实||真=真
真实||假=真
假||真=真
假||假=假

条件运算符的Java示例

public class ConditionalDemo {
  public static void main(String[] args) {
    int x = 3;
    int y = 4;
    int z = 5;
    //evaluates to false
    if((x > z) && (y > z)){
      System.out.println("x and y are greater than z");
    }
    //evaluates to true
    if((x < z) && (y < z)){
      System.out.println("x and y are less than z");
    }
		
    // One is true so evaluates to true
    if((x < z) || (y > z))
      System.out.println("Either x is less than z or y is greater than z");
  }
}

输出:

x and y are less than z
Either x is less than z or y is greater than z

条件运算符的短路行为

Java中的条件运算符表现出短路行为,这意味着仅在需要时才对表达式中的第二个操作数求值。

对于&&运算符,如果两个布尔表达式中的任何一个为false,则结果为false。这意味着,如果第一个表达式的计算结果为假,那么甚至不需要评估第二个表达式,因为结果无论如何都是假的。

如果||运算符,如果两个布尔表达式中的任何一个为true,则结果为true。这意味着,如果第一个表达式的计算结果为true,那么甚至不需要评估第二个表达式,因为结果无论如何都是正确的。

Java示例表现出短路行为

public class ConditionalDemo {
  public static void main(String[] args) {
    //evaluates to false
    if(evaluateMethod(4, 5) && evaluateMethod(5, 4)){
      System.out.println("evaluates to true");
    }else{
      System.out.println("evaluates to false");
    }
  }
  static boolean evaluateMethod(int num1, int num2){
    System.out.println("In evaluateMethod" );
    return num1 > num2;
  }  
}

输出:

In evaluateMethod
evaluates to false

如我们所见,第一个表达式本身的计算结果为false,这就是为什么在条件AND的第二个表达式中甚至没有调用method的原因。

public class ConditionalDemo {
  public static void main(String[] args) {
    //evaluates to false
    if(evaluateMethod(7, 6) && evaluateMethod(5, 4)){
      System.out.println("evaluates to true");
    }else{
      System.out.println("evaluates to false");
    }
  }
  static boolean evaluateMethod(int num1, int num2){
    System.out.println("In evaluateMethod");
    return num1 > num2;
  }  
}

输出:

In evaluateMethod
In evaluateMethod
evaluates to true

现在第一个表达式的计算结果为true,因此第二个表达式的计算结果也是如此,这就是为什么现在两次都调用method的原因。

为了检查条件OR中的短路行为,我们可以将表达式更改为||。在上面的代码中。

public class ConditionalDemo {
  public static void main(String[] args) {
    //evaluates to false
    if(evaluateMethod(7, 6) || evaluateMethod(5, 4)){
      System.out.println("evaluates to true");
    }else{
      System.out.println("evaluates to false");
    }
  }
  static boolean evaluateMethod(int num1, int num2){
    System.out.println("In evaluateMethod");
    return num1 > num2;
  }  
}

输出:

In evaluateMethod
evaluates to true

在if条件下,第一个表达式的计算结果为true,因为它是一个有条件的-或者因此无需评估第二个表达式,因为结果无论如何都是真实的。这就是为什么不调用第二个表达式中的validateMethod()的原因。