&与&&都有逻辑与的意思,但&属于“非短路”运算符,&&属于“短路”运算符。
1 &&短路优先
public class Test {
public static void main(String[] args) {
int x = 5;
int y = 5;
if(x > 10 && x++>11){
y +=1;
}
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
输出
x=5
y=5
x > 10 为 false ,短路优先,没有接着执行 x++ > 11逻辑。
对于:&& – > 只要符号左边为false,则结果为false;当左边为true,同时右边也为true,则结果为true
2 & 非短路
1)
public class Test {
public static void main(String[] args) {
int x = 5;
int y = 5;
if(x > 10 & x++>11){
y +=1;
}
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
输出
x=6
y=5
x> 10 为false。然后接着执行x++>11 操作,x变成6 > 11 false。两边都是false。所以y +=1不会执行。
2)
public class Test {
public static void main(String[] args) {
int x = 5;
int y = 5;
if(x > 1 & x++>1){
y +=1;
}
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
输出
x=6
y=6
x>1为true,后x++ ,x为6 > 1 为true。两边都是true,所以执行 y+=1。y变成6。
对于:& – > 只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true
另外&还是“按位与”运算符。如果两个整型数据的二进制数对应位都为1,结果为1,否则为0。
参考文章
《Java面试题目:&与&&的区别?》:https://blog.csdn.net/qq_38278850/article/details/94072118
《java中&和&&的区别和联系》:https://www.cnblogs.com/hongten/p/hongten_java_yu.html