-7

可能的重复:
& 和 && 的差异

if (true && true) {
    System.out.println("test if");
}

if (true & true) {
    System.out.println("test if");
}

两者都给出相同的输出。为什么?

4

7 回答 7

7

&&短路,而&没有。例子:

if (methodA() && methodB()) {
    ...
}

在这种情况下,如果methodA已经返回 false,methodB则不会调用。形式上,如果您有一个表达式a && b,b仅在评估为 时才被a评估true

除了明显的性能优势外,这对于null检查特别有用:

if (x != null && x.getSomeValue()) {
    ...
}

如果你&在这里使用 as single ,x.getSomeValue()即使 are 也会被评估xnull导致异常。

于 2012-09-25T07:22:24.653 回答
1

在第一种情况下,您不测试 if 的第二部分:&&运算符从左到右执行并在第一个false值处停止。

这在这种情况下可能很有用:

if (a!=null && a.doSomething()==23) {

因为它可以防止 nullPointerException。

当您测试布尔条件时,请始终使用&&.

于 2012-09-25T07:21:08.547 回答
1

&位操作

&&逻辑链接两个布尔值

于 2012-09-25T07:21:36.947 回答
1

请参阅: http ://www.jguru.com/faq/view.jsp?EID=16530

这取决于参数的类型...

对于整数参数,单个 & 符号 ("&") 是“按位与”运算符。除了两个布尔参数之外,没有为任何东西定义双与号(“&&”)。

对于布尔参数,单与号构成(无条件)“逻辑与”运算符,而双与号(“&&”)是“条件逻辑与”运算符。也就是说,单 & 号总是计算两个参数,而双 & 号只有在第一个参数为真时才会计算第二个参数。

对于所有其他参数类型和组合,应该会发生编译时错误。

于 2012-09-25T07:21:59.530 回答
0

&& 是逻辑与。true && true 是真的,其他的都是假的。& 是按位与。(10 & 8) = 8

于 2012-09-25T07:27:21.570 回答
0

在 & 语句中,它将检查左侧和右侧语句。在 && 中,将仅检查语句的一侧(如果一侧为真,则不会检查另一侧)

于 2012-09-25T07:21:58.790 回答
0

&& 是逻辑与

所以你要确保这两个陈述都是真实的。

& 是按位与运算符

看看这里:

http://www.javaforstudents.co.uk/TrueFalse

于 2012-09-25T07:22:02.417 回答