java的逻辑运算符
当前位置:以往代写 > JAVA 教程 >java的逻辑运算符
2019-06-14

java的逻辑运算符

java的逻辑运算符

逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true或false)——以自变量的逻辑干系为基本。下面这个例子向各人展示了如何利用干系和逻辑运算符。

 

//: Bool.java
// Relational and logical operators
import java.util.*;

public class Bool {
  public static void main(String[] args) {
    Random rand = new Random();
    int i = rand.nextInt() % 100;
    int j = rand.nextInt() % 100;
    prt("i = " + i);
    prt("j = " + j);
    prt("i > j is " + (i > j));
    prt("i < j is " + (i < j));
    prt("i >= j is " + (i >= j));
    prt("i <= j is " + (i <= j));
    prt("i == j is " + (i == j));
    prt("i != j is " + (i != j));

    // Treating an int as a boolean is 
    // not legal Java
//! prt("i && j is " + (i && j));
//! prt("i || j is " + (i || j));
//! prt("!i is " + !i);

    prt("(i < 10) && (j < 10) is "
       + ((i < 10) && (j < 10)) );
    prt("(i < 10) || (j < 10) is "
       + ((i < 10) || (j < 10)) );
  }
  static void prt(String s) {
    System.out.println(s);
  }
} ///:~

只可将AND,OR或NOT应用于布尔值。与在C及C++中差异,不行将一个非布尔值看成布尔值在逻辑表达式中利用。若这样做,就会发明实验失败,并用一个“//!”标出。然而,后续的表达式操作干系较量生成布尔值,然后对功效举办逻辑运算。
输出列表看起来象下面这个样子:

 

i = 85
j = 4
i > j is true
i < j is false
i >= j is true
i <= j is false
i == j is false
i != j is true
(i < 10) && (j < 10) is false
(i < 10) || (j < 10) is true

留意若在估量为String值的处所利用,布尔值会自动转换成适当的文本形式。
在上述措施中,可将对int的界说替换成除boolean以外的其他任何主数据范例。但要留意,对浮点数字的较量长短常严格的。纵然一个数字仅在小数部门与另一个数字存在极微小的差别,仍然认为它们是“不相等”的。纵然一个数字只比零大一点点(譬喻2不断地开平方根),它仍然属于“非零”值。

1. 短路
操纵逻辑运算符时,我们会碰着一种名为“短路”的环境。这意味着只有明晰得出整个表达式真或假的结论,才会对表达式举办逻辑求值。因此,一个逻辑表达式的所有部门都有大概不举办求值:

 

//: ShortCircuit.java
// Demonstrates short-circuiting behavior
// with logical operators.

public class ShortCircuit {
  static boolean test1(int val) {
    System.out.println("test1(" + val + ")");
    System.out.println("result: " + (val < 1));
    return val < 1;
  }
  static boolean test2(int val) {
    System.out.println("test2(" + val + ")");
    System.out.println("result: " + (val < 2));
    return val < 2;
  }
  static boolean test3(int val) {
    System.out.println("test3(" + val + ")");
    System.out.println("result: " + (val < 3));
    return val < 3;
  }
  public static void main(String[] args) {
    if(test1(0) && test2(2) && test3(2))
      System.out.println("expression is true");
    else
      System.out.println("expression is false");
  }
} ///:~

每次测试城市较量自变量,并返回真或假。它不会显示与筹备挪用什么有关的资料。测试在下面这个表达式中举办:
if(test1(0)) && test2(2) && test3(2))
很自然地,你也许认为所有这三个测试城市得以执行。但但愿输出功效不至于使你大吃一惊:

 

if(test1(0) && test2(2) && test3(2))

第一个测试生成一个true功效,所以表达式求值会继承下去。然而,第二个测试发生了一个false功效。由于这意味着整个表达式必定为false,所觉得什么还要继承剩余的表达式呢?这样做只会徒劳无益。事实上,“短路”一词的由来正种因于此。假如一个逻辑表达式的所有部门都不必执行下去,那么潜在的机能晋升将是相当可观的。

    关键字:

在线提交作业