public class EqualTest {
static int j;
public static void main(String[] args) {
methodA(0);
System.out.println(j);
}
public static boolean methodB(int k) {
j+=k;
return true;
}
public static void methodA(int i) {
boolean b;
b=i<10|methodB(4);
b=i<10||methodB(8);
}
}为什么输出是4,不是12.
static int j;
public static void main(String[] args) {
methodA(0);
System.out.println(j);
}
public static boolean methodB(int k) {
j+=k;
return true;
}
public static void methodA(int i) {
boolean b;
b=i<10|methodB(4);
b=i<10||methodB(8);
}
}为什么输出是4,不是12.
boolean b;
b = i < 10 | methodB(4);
// | 逻辑与 无论前面的表述式是什么值,都会计算第二个表达式
b = i < 10 || methodB(8);
// || 短路与,b=i<10结果是true,整个表述式的值结果已经可以算出来了,后面不的表述示method(8)不执行
}
b=i<10||methodB(8);双竖线"或"短路操作符,前者为true时,或后面的代码不执行。
同样的也有& 和 && 的非短路和短路效果。 & 前条件为false时,&后面的代码会执行;
&& 前面的条件为false时,&&后面的代码不会执行。
"||"是短路“或”,前面表达式如果为“true”后面表达式不执行,只有在前面表达式为“false”时,才继续后面表达式的执行。
“&”是非短路“与”,即前面表达式为“false”的时候,依然继续执行后面的表达式。
“&&”是短路“与”,即前面表达式为“false”的时候,后面的表达式不执行,只有在前面表达式为“true”的时候,后面的表达式才执行。
b=i<10||methodB(8);
上面代码用的短路“或”,所以前面表达式为“true”后面的methodB(8)代码就没有执行了。所以结果是4而不是12