首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么未在"false && counter()“中调用counter()?

为什么未在"false && counter()“中调用counter()?
EN

Stack Overflow用户
提问于 2017-06-07 13:28:47
回答 3查看 122关注 0票数 0

我试图弄清楚这个布尔表达式是如何计算的:

代码语言:javascript
复制
int i = 0;
boolean exp = i > 1 && counter();

在以下代码中:

代码语言:javascript
复制
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 = 0i > 1是false,counter()返回false。但是,我很困惑,因为静态变量num的值并没有改变,尽管counter()函数位于布尔表达式中:

代码语言:javascript
复制
exp = i > 1 && counter();

我原以为输出是

代码语言:javascript
复制
1
false

但它是

代码语言:javascript
复制
0
false

为什么counter()似乎没有被调用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-07 13:31:44

这是因为&&短路了.当i > 1计算为false时,不需要检查逻辑的另一端,因为得到的表达式总是false。因此,counter方法永远不会运行。

要解决这个问题,可以将counter()移动为第一个条件,也可以使用非短路&

票数 3
EN

Stack Overflow用户

发布于 2017-06-07 13:38:54

&&操作符,如果左侧表达式为真,则计算右侧表达式。

如果其中任何一个表达式为false,则在&&运算符情况下,整个表达式将为false,->不需要计算其他表达式。因此,在您的情况下,将根本不执行计数器()表达式。

0>1失败。

因此,计数器()根本没有被计算过。

票数 2
EN

Stack Overflow用户

发布于 2017-06-07 13:32:08

这是因为&&是快速布尔运算。如果第一个操作数为false,那么它将立即返回false,而不计算第二个操作数。您可以使用&,它总是计算两个操作数。(如果操作数是整数的话,&也是一个有点明智的运算符。)逻辑OR:||也是如此。如果第一个操作数为真,它将立即返回true。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44414082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档