4

正如在 Java 中的思考中所说,如果你有 2 个布尔对象,x并且y你可以在它们上使用任何一个x= x&&yx=x&y那么为什么有必要同时拥有这两种类型呢?

4

4 回答 4

12

这两个运算符的行为不同:

  • &将始终评估两个操作数
  • &&短路的- 如果第一个操作数的计算结果为false,那么总体结果将始终为假,并且第二个操作数不被计算

有关更多详细信息,请参阅 Java 语言规范:

于 2012-11-26T12:49:38.037 回答
3

查看这段代码的输出:

    int x = 0;
    boolean b = false & (++x == 1); // b is false
    System.out.println(x); // prints 1
    x = 0;
    b = false && (++x == 1); // b is false
    System.out.println(x); // prints 0

这是不同的,因为&总是会计算两个操作数,而&&如果第一个操作数是,则不会查看第二个操作数,因为无论第二个操作数是什么,false整个表达式将始终是。false

于 2012-11-26T12:50:18.787 回答
2
  1. &将评估两个操作数
  2. &&如果第一个操作数为假,将跳过对第二个操作数的评估
于 2012-11-26T12:50:27.710 回答
1

& 是按位 'and' 运算符,&& 是布尔值 'and'

& 将始终评估左侧和右侧, && 仅在足以评估表达式的情况下评估左侧(例如 false && true :仅评估 LHS,因为如果 LHS 为 false,则整个表达式必须为 false)

于 2012-11-26T12:53:35.000 回答