我试图弄清楚这个布尔表达式是如何计算的:
int i = 0;
boolean exp = i > 1 && counter();在以下代码中:
public class Main {
static int num = 0;
public static boolean counter(){
num++;
if(num == 6){
return true;
}
return false;
}
public static void main(String[] args) {
//int i = 2;
int i = 0;
boolean exp = i > 1 && counter();
System.out.println(num); // 0
System.out.println(exp); // false
}
}因为i = 0,i > 1是false,counter()返回false。但是,我很困惑,因为静态变量num的值并没有改变,尽管counter()函数位于布尔表达式中:
exp = i > 1 && counter();我原以为输出是
1
false但它是
0
false为什么counter()似乎没有被调用?
发布于 2017-06-07 13:31:44
这是因为&&短路了.当i > 1计算为false时,不需要检查逻辑的另一端,因为得到的表达式总是false。因此,counter方法永远不会运行。
要解决这个问题,可以将counter()移动为第一个条件,也可以使用非短路&。
发布于 2017-06-07 13:38:54
&&操作符,如果左侧表达式为真,则计算右侧表达式。
如果其中任何一个表达式为false,则在&&运算符情况下,整个表达式将为false,->不需要计算其他表达式。因此,在您的情况下,将根本不执行计数器()表达式。
0>1失败。
因此,计数器()根本没有被计算过。
发布于 2017-06-07 13:32:08
这是因为&&是快速布尔运算。如果第一个操作数为false,那么它将立即返回false,而不计算第二个操作数。您可以使用&,它总是计算两个操作数。(如果操作数是整数的话,&也是一个有点明智的运算符。)逻辑OR:||也是如此。如果第一个操作数为真,它将立即返回true。
https://stackoverflow.com/questions/44414082
复制相似问题