Java逻辑运算符

Java逻辑运算符包含下面6中符号:

&& 与 ;&& 与  前后两个操作数必须都是true才返回true,否则返回false

& 不短路与 ; & 不短路与 表达式都会执行到

|| 或; || 或 只要两个操作数中有一个是true,就返回true,否则返回false

|不短路或 ;| 不短路 或 表达式都会执行到

!非;! 非 ,如果操作数为true,返回false,否则,返回true

^异或;^ 异或 ,当两个操作数不相同时返回true,返回false

真值表

   A                    B                            A&&B      A||B         !A           A^B          A&B         A|B

   false               false                       false        false        true         false        false          false

   true                false                       false       true          false        true          false          true

   false               true                        false        true         true         true         false          true

    true                     true                                true            true            false           false            true              true

总结

两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。其区别是:&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。

    例如,有如下逻辑表达式:

    (i>=1) && (i<=100)

    此时,若i等于0,则系统判断出i>=1的计算结果为false后,系统马上得出该逻辑表达式的最终计算结果为false,因此,系统不继续判断i<=100的值。短路计算功能可以提高程序的运行速度。

    建议:在程序设计时使用&&和||运算符,不使用&和|运算符。

    用逻辑与(&&)、逻辑或(||)和逻辑非(!)可以组合出各种可能的逻辑表达式。逻辑表达式主要用在 if、while等语句的条件组合上。

    例如:

    int i = 1;

    while(i>=1) && (i<=100) i++;    //循环过程

    上述程序段的循环过程将i++语句循环执行100次。


例子

if((23>24)&&(100/0==0)){//23>24 为false,后面条件就不执行判断,当23<24为true,后面条件继续执行判断,抛出异常java.lang.ArithmeticException: / by zero 
}
if((23>24)&(100/0==0)){//条件必须都执行判断,抛出异常java.lang.ArithmeticException: / by zero
}
if((23<24)||(100/0==0)){// ||短路或,当第一个条件为true,后面条件不执行判断;
}
if((23>24)|(100/0==0)){// | 非短路或,所有条件都要执行判断
}

例子二

package com.xiaoming123.chap02;
public class Demo09 {
    public static void main(String[] args) {
        // && 与  前后两个操作数必须都是true才返回true,否则返回false
                boolean b1=(5<3)&&(4>5);
                System.out.println("b1="+b1);
                 
                // & 不短路与
                boolean b2=(5<3)&(4>5);
                System.out.println("b2="+b2);
                 
                // 一般都用&& 短路  
                // 原因:效率高
                 
                // || 或 只要两个操作数中有一个是true,就返回true,否则返回false
                boolean b3=(2<3)||(4>5);
                System.out.println("b3="+b3);
                 
                // | 不短路 或
                boolean b4=(2<3)|(4>5);
                System.out.println("b4="+b4);
                 
                // ! 非 ,如果操作数为true,返回false,否则,返回true
                boolean b5=!(3<4);
                System.out.println("b5="+b5);
                 
                // ^ 异或 ,当两个操作数不相同时返回true,返回false
                boolean b6=(5>4)^(4>5);
                System.out.println("b6="+b6);
    }
}

精彩推荐