Aar*_*ron 90 java logical-operators
哪一组是短路的,这究竟是什么意味着复杂的条件表达式是短路的?
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);
}
Run Code Online (Sandbox Code Playgroud)
Boh*_*ian 226
在&&与||运营商"短路",这意味着如果没有必要,他们不评价的右手边.
在&与|运营商,如逻辑运算符时,始终评估两侧.
每个运营商只有一个短路案例,它们是:
false && ... - 没有必要知道右手边是什么,结果必须是 falsetrue || ... - 没有必要知道右手边是什么,结果必须是 true让我们在一个简单的例子中比较行为:
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;
}
Run Code Online (Sandbox Code Playgroud)
第二个版本使用非短路运营商&,并抛出一个NullPointerException如果input是null,但是第一个版本将返回false无异常;
SET A使用短路布尔运算符.
在布尔运算符的上下文中,"短路"意味着对于一组布尔值b1,b2,...,bn,只要第一个布尔值为真,短路版本就会停止评估(|| )或假(&&).
例如:
// 2 == 2 will never get evaluated because it is already clear from evaluating
// 1 != 1 that the result will be false.
(1 != 1) && (2 == 2)
// 2 != 2 will never get evaluated because it is already clear from evaluating
// 1 == 1 that the result will be true.
(1 == 1) || (2 != 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130056 次 |
| 最近记录: |