Java中或和短路或的区别 短路与和非短路与java_java短路计算与非短路计算

1、逻辑运算的概念

简单地说,逻辑运算就是对布尔值或者结果是布尔值的表达式进行运算,得到的结果也是布尔值。

Java中或和短路或的区别 短路与和非短路与java_逻辑运算_02

逻辑运算有三种:

(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、一些情况下,短路逻辑运算与不短路逻辑运算的结果相同

例如下面的程序:

Java中或和短路或的区别 短路与和非短路与java_逻辑与_03

说明:虽然这个程序中,短路逻辑运算与不短路逻辑运算结果相同,但是短路逻辑运算的执行效率更高。

5、有些情况下,短路逻辑运算与不短路逻辑运算的结果不相同

例如下面的短路逻辑运算程序:

Java中或和短路或的区别 短路与和非短路与java_逻辑与_04

程序的运行结果是:

truetrue

如果程序修改为不短路逻辑运算:

Java中或和短路或的区别 短路与和非短路与java_Java中或和短路或的区别_05

程序的运行结果是:

truefalse 6、有些情况下,不短路逻辑运算可能导致程序出现异常

例如下面的短路逻辑运算,可以正常运行:

Java中或和短路或的区别 短路与和非短路与java_java短路计算与非短路计算_06

程序的运行结果是:

empty

如果将程序修改为不短路逻辑运算:

Java中或和短路或的区别 短路与和非短路与java_逻辑与_07

程序的运行情况为:

Exception in thread "main" java.lang.NullPointerException at logic.printLength(logic.java:4) at logic.main(logic.java:13)

编程实践