要了解短路求值就必须先了解什么是逻辑运算符。
逻辑运算符
在了解运算符之前我们必须先知道再JAVA中逻辑运算符的结果是Boolean类型的值
逻辑与“&&”
表达式1 && 表达式2
逻辑与就是只有运算符两边的表达式都为真,结果才为真。
表达式1 | 表达式2 | 结果 |
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
逻辑或“||”
表达式1 || 表达式2
逻辑与就是只有当两边表达式都为假的时候,结果才为假。
表达式1 | 表达式2 | 结果 |
---|---|---|
假 | 假 | 假 |
假 | 真 | 真 |
真 | 假 | 真 |
真 | 真 | 真 |
逻辑非“!”
!表达式1
与,或,非三个逻辑表达式中只有非是单目运算符。
当表达式1为真,结果就为假;
当表达式1为假,结果就为真。
表达式1 | 结果 |
---|---|
真 | 假 |
假 | 真 |
短路求值
了解完逻辑运算符之后就来了解一下短路求值
首先你可以先思考一下下面代码的输出结果。
答案:
两道题的结果都是:
为什么会这样呢?
- 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
- 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
如果你想在写代码时无论如何都不出现短路求值 。
那么在JAVA中位运算符“& |”当它们两个两边的表达式返回值为Boolean时他们也可以充当逻辑运算符。
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值。