在java中的if语句中&和&&有什么区别?

-8 java android

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

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

if (true & true) {
    System.out.println("test if");
}
Run Code Online (Sandbox Code Playgroud)

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

Hei*_*nzi 6

&&短路,&没有.例:

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()即使xnull,也会进行评估,从而导致异常.