学科分类
目录
Java基础

逻辑运算符

逻辑运算符用于对布尔类型的值或表达式进行操作,其结果仍是一个布尔值。接下来通过一张表来展示Java中的逻辑运算符及其用法,如表1所示。

表1 逻辑运算符

运算符 运算 范例 结果
& true & true true
& true & false false
& false & false false
& false &true false
| true | true true
| true | false true
| false| false false
| false| true true
^ 异或 true ^ true false
^ 异或 true ^ false true
^ 异或 false ^ false false
^ 异或 false ^ true true
! !true false
! !false true
&& 短路与 true && true true
&& 短路与 true && false false
&& 短路与 false && false false
&& 短路与 false && true false
|| 短路或 true || true true
|| 短路或 true || false true
|| 短路或 false|| false false
|| 短路或 false|| true true

在使用逻辑运算符的过程中,需要注意以下几个细节:

1.逻辑运算符可以针对结果为布尔值的表达式进行逻辑运算。如:5 > 3 && 1 != 0的结果为true。

2.运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。当运算符“&”和“&&”的右边为表达式时,两者在使用上还有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式不会进行运算,因此“&&”被称作短路与。

接下来通过一个案例来深入了解一下两者的区别,如文件1所示。

文件1 Example06.java

 1    public class Example06 {
 2        public static void main(String[] args) {
 3            int x = 0; // 定义变量x,初始值为0
 4            int y = 0; // 定义变量y,初始值为0
 5            int z = 0; // 定义变量z,初始值为0
 6            boolean a, b; // 定义boolean变量a和b
 7            a = x > 0 & y++ > 1;  // 逻辑运算符&对表达式进行运算,然后将结果赋值给a
 8            System.out.println("a = " + a);
 9            System.out.println("y = " + y);
 10            b = x > 0 && z++ > 1; // 逻辑运算符&&对表达式进行运算,然后将结果赋值给b
 11            System.out.println("b = " + b);
 12            System.out.println("z = " + z);
 13        }
 14    }

运行结果如图1所示。

图1 运行结果

在文件 1中,定义了三个整型变量x、y、z,初始值都为0,同时定义了两个布尔类型的变量a和b。文件中的第7行代码使用“&”运算符对两个表达式进行运算,左边表达式x>0的结果为false,这时无论右边表达式y++>0的比较结果是什么,整个表达式x > 0 & y++ > 1的结果都会是false。由于使用的是单个的运算符“&”,运算符两边的表达式都会进行运算,因此变量y会进行自增,整个表达式运算结束时y的值为1。文件中的第10行代码是短路与运算,运算结果和第7行代码一样为false,区别在于使用了短路与“&&”运算符,当左边为false时,右边的表达式不再进行运算,因此变量z的值仍为0。

3.运算符“|”和“||”都表示或操作,当运算符任何一边的操作数或表达式为true时,其结果为true,当两边的值都为false时,其结果才为false。同与操作类似,“||”表示短路或,当运算符“||”的左边为true时,右边的表达式不会进行运算,具体示例如下:

int x = 0;
int y = 0;
boolean b = x==0 || y++>0

上面的代码块执行完毕后,b的值为true,y的值仍为0。出现这样结果的原因是,运算符“||”的左边x==0结果为true,那么右边表达式将不会进行运算,y的值不发生任何变化。

4.运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边布尔值不相同时,其结果为true。

点击此处
隐藏目录