可能重复:
&和&&的差异
if (true && true) {
System.out.println("test if");
}
if (true & true) {
System.out.println("test if");
}
Run Code Online (Sandbox Code Playgroud)
两者都给出相同的输出.为什么?
&&短路,&没有.例:
if (methodA() && methodB()) {
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果methodA已经返回false,methodB则不会被调用.形式上,如果你有一个表达式a && b,b只有在a评估时才会被评估true.
除了明显的性能优势外,这对于null检查特别有用:
if (x != null && x.getSomeValue()) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果您&在这里单独使用,x.getSomeValue()即使x是null,也会进行评估,从而导致异常.