可能的重复:
& 和 && 的差异
if (true && true) {
System.out.println("test if");
}
if (true & true) {
System.out.println("test if");
}
两者都给出相同的输出。为什么?
可能的重复:
& 和 && 的差异
if (true && true) {
System.out.println("test if");
}
if (true & true) {
System.out.println("test if");
}
两者都给出相同的输出。为什么?
&&
短路,而&
没有。例子:
if (methodA() && methodB()) {
...
}
在这种情况下,如果methodA
已经返回 false,methodB
则不会调用。形式上,如果您有一个表达式a && b
,b
仅在评估为 时才被a
评估true
。
除了明显的性能优势外,这对于null
检查特别有用:
if (x != null && x.getSomeValue()) {
...
}
如果你&
在这里使用 as single ,x.getSomeValue()
即使 are 也会被评估x
,null
导致异常。
在第一种情况下,您不测试 if 的第二部分:&&
运算符从左到右执行并在第一个false
值处停止。
这在这种情况下可能很有用:
if (a!=null && a.doSomething()==23) {
因为它可以防止 nullPointerException。
当您测试布尔条件时,请始终使用&&
.
请参阅: http ://www.jguru.com/faq/view.jsp?EID=16530
这取决于参数的类型...
对于整数参数,单个 & 符号 ("&") 是“按位与”运算符。除了两个布尔参数之外,没有为任何东西定义双与号(“&&”)。
对于布尔参数,单与号构成(无条件)“逻辑与”运算符,而双与号(“&&”)是“条件逻辑与”运算符。也就是说,单 & 号总是计算两个参数,而双 & 号只有在第一个参数为真时才会计算第二个参数。
对于所有其他参数类型和组合,应该会发生编译时错误。
&& 是逻辑与。true && true 是真的,其他的都是假的。& 是按位与。(10 & 8) = 8
在 & 语句中,它将检查左侧和右侧语句。在 && 中,将仅检查语句的一侧(如果一侧为真,则不会检查另一侧)