1、逻辑运算的概念
简单地说,逻辑运算就是对布尔值或者结果是布尔值的表达式进行运算,得到的结果也是布尔值。
逻辑运算有三种:
(1)逻辑与:有两个操作数,当左右两个操作数都是true时,结果才为true,否则结果为false。伪代码为:
boo_expression1 and bool_expression2
(2)逻辑或:有两个操作数,当左右两个操作数都是false时,结果才为false,否则结果为true。伪代码为:
boo_expression1 or bool_expression2
(3)逻辑非:只有一个操作数,当操作数为true时结果为false,当操作数为false时结果为true。伪代码为:
not bool_expression
在Java的“逻辑与”、“逻辑或”运算中,有短路和不短路运算的差别。
2、短路逻辑运算的概念
短路逻辑运算:在逻辑与、逻辑或运算中,当bool_expression1可以确定结果时,将不对bool_expression2进行计算。
Java的短路“逻辑与”运算符是 &&。
Java的短路“逻辑或”运算符是 ||。
3、不短路逻辑运算的概念
不短路逻辑运算:在逻辑与、逻辑或运算中,必须对bool_expression1和bool_expression2都进行计算后,才得出最终的结果。
Java的不短路“逻辑与”运算符是 &。
Java的不短路“逻辑或”运算符是 |。
4、一些情况下,短路逻辑运算与不短路逻辑运算的结果相同
例如下面的程序:
说明:虽然这个程序中,短路逻辑运算与不短路逻辑运算结果相同,但是短路逻辑运算的执行效率更高。
5、有些情况下,短路逻辑运算与不短路逻辑运算的结果不相同
例如下面的短路逻辑运算程序:
程序的运行结果是:
truetrue
如果程序修改为不短路逻辑运算:
程序的运行结果是:
truefalse 6、有些情况下,不短路逻辑运算可能导致程序出现异常
例如下面的短路逻辑运算,可以正常运行:
程序的运行结果是:
empty
如果将程序修改为不短路逻辑运算:
程序的运行情况为:
Exception in thread "main" java.lang.NullPointerException at logic.printLength(logic.java:4) at logic.main(logic.java:13)
编程实践