和&之间的区别是什么?和&&在java中的if语句?

时间:2012-09-25 07:19:35

标签: java android

  

可能重复:
  Difference in & and &&

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

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

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

7 个答案:

答案 0 :(得分:5)

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

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

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

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

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

如果您在此使用单&,即使x.getSomeValue()x,也会评估null,从而导致异常。

答案 1 :(得分:1)

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

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

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

因为它可以防止nullPointerException。

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

答案 2 :(得分:1)

答案 3 :(得分:1)

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

  

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

     

对于整数参数,单个&符号(“&”)是“按位AND”   运营商。双&符号(“&&”)没有为任何东西定义   两个布尔参数。

     

对于布尔参数,单个&符号构成   (无条件)“逻辑AND”运算符而双符号   (“&&”)是“条件逻辑AND”运算符。也就是说   单个&符号总是评估两个参数而不是   如果是第一个,则双符号只会评估第二个参数   论证是真的。

     

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

答案 4 :(得分:0)

In&它会检查左侧和右侧的陈述。并且&&将仅检查声明的一方(如果一方是真的,则不会检查另一方)

答案 5 :(得分:0)

&安培;&安培;是逻辑AND

所以你想确保BOTH语句变为真。

&安培;是按位AND运算符

看看这里:

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

答案 6 :(得分:0)

&安培;&安培;是合乎逻辑的。 真实&&是真的,其他一切都是假的。 &安培;是按位的。 (10& 8)= 8