Java逻辑运算符短路 [英] Java logical operator short-circuiting
问题描述
哪个集合是短路的,复杂条件表达式是短路的究竟是什么意思?
Which set is short-circuiting, and what exactly does it mean that the complex conditional expression is short-circuiting?
public static void main(String[] args) {
int x, y, z;
x = 10;
y = 20;
z = 30;
// T T
// T F
// F T
// F F
//SET A
boolean a = (x < z) && (x == x);
boolean b = (x < z) && (x == z);
boolean c = (x == z) && (x < z);
boolean d = (x == z) && (x > z);
//SET B
boolean aa = (x < z) & (x == x);
boolean bb = (x < z) & (x == z);
boolean cc = (x == z) & (x < z);
boolean dd = (x == z) & (x > z);
}
推荐答案
&&
和 ||
运算符短路",意味着它们不如果没有必要,请不要评估右侧.
The &&
and ||
operators "short-circuit", meaning they don't evaluate the right-hand side if it isn't necessary.
&
和 |
运算符,当用作逻辑运算符时,总是计算两边.
The &
and |
operators, when used as logical operators, always evaluate both sides.
每个算子只有一种短路情况,它们是:
There is only one case of short-circuiting for each operator, and they are:
false &&...
- 没有必要知道右边是什么,因为结果只能是false
而不管那里的值是什么true ||...
- 没有必要知道右边是什么,因为结果只能是true
而不管那里的值是什么
false && ...
- it is not necessary to know what the right-hand side is because the result can only befalse
regardless of the value theretrue || ...
- it is not necessary to know what the right-hand side is because the result can only betrue
regardless of the value there
让我们用一个简单的例子来比较一下行为:
Let's compare the behaviour in a simple example:
public boolean longerThan(String input, int length) {
return input != null && input.length() > length;
}
public boolean longerThan(String input, int length) {
return input != null & input.length() > length;
}
第二个版本使用非短路操作符&
,如果input
为null<,将抛出
NullPointerException
/code>,但第一个版本将无一例外地返回 false
.
The 2nd version uses the non-short-circuiting operator &
and will throw a NullPointerException
if input
is null
, but the 1st version will return false
without an exception.
这篇关于Java逻辑运算符短路的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!