逻辑运算符
逻辑运算符用于对布尔类型的值或表达式进行操作,其结果仍是一个布尔值。接下来通过一张表来展示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。