【问题标题】:JAVA: What is the difference between a logical AND/OR and short circuit AND/OR? [duplicate]JAVA:逻辑与/或和短路与/或有什么区别? [复制]
【发布时间】:2016-08-24 13:27:45
【问题描述】:

当我运行一个简单的程序时,它们( & 和 && )似乎可以互换工作。有人可以解释一下我应该何时使用每种情况吗?

 public class Test1 {

    public static void main(String [] args){

        int counter = 0;

        int dice1;
        int dice2;


    for (int loop = 0; loop <= 1000; loop++) {


    dice1= (int) (Math.random()*6)+1;
    dice2= (int) (Math.random()*6)+1;

        if (dice1 == 6 && dice2 == 6){
            counter ++;
        }

    }

    System.out.println("Counter = " + counter);

    } 
}

当我使用 & 而不是 && 时,这个程序似乎也可以工作。那么有什么区别呢?

【问题讨论】:

  • 我在您的代码中没有看到任何 ||| 的用法。你能分享你的实际代码吗?
  • 我的意思是 & 和 &&,我的错
  • 你知道其中一个短路了。你明白那是什么意思吗?如果您的测试是test != null &amp;&amp; test.equals("foo") 怎么办?测试一下。
  • @JBNizet 指出的问题有一个不正确的公认答案。由于我无法再回答这个问题,我无法完全解释其中的区别。可以说单个 & 运算符是按位的,而 && 是逻辑与。此外,if 语句仅评估布尔运算。 if 的每个部分都计算为布尔值。然后,如果你按位 & 一个布尔值和另一个布尔值,你将得到一个布尔结果。因此,在这种情况下,您将获得相同的输出。但是逻辑计算可以短路,而按位表达式不能。

标签: java conditional statements


【解决方案1】:

主要区别在于&amp;&amp;|| 运算符执行某种“惰性求值”

在这行代码中:

method1() & method2();

这两种方法的调用都与method1 的返回值无关。另一方面在这行代码中:

method1() && method2();

只有在method1 返回true 时才会调用method2

当使用||时,第二个方法只会在第一个方法返回false时被调用。


【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2011-06-30
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2015-07-25
    • 2011-07-10
    相关资源
    最近更新 更多