相同点:
- ||和&&都是逻辑运算符,而|和&是位运算符。位运算符的优先级要比逻辑运算符的优先级高。
&和&&的区别
- &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true。否则,只要有一方为false,结果就为false.
- &&为短路运算符。即为如果第一个表达式为false,则不再计算第二个表达式。例如,下面代码可以看出a > 1为false,则右边的表达式没有计算,所以输出结果为b = 2.
int a = 1;
int b = 2;
if (a > 1 && ++b > 2) {
System.out.println("进入if循环");
}
System.out.println("a = " + a + ", b = " + b);
输出结果:a = 1, b = 2
- &为位运算符。符号两边的表达式一定都会运算。例如,下面代码可以看出a > 1为false,则右边的表达式也会正常运算,因此输出结果b = 3.
int a = 1;
int b = 2;
if (a > 1 & ++b > 2) {
System.out.println("进入if循环");
}
System.out.println("a = " + a + ", b = " + b);
输出结果:a = 1, b = 3
- &为位运算符。当&操作符两边的表达式不是boolean类型时,&表示按位与操作。运算规则(有0则为0)
|和||的区别
- |和||都可以用作逻辑或的运算符,表示逻辑或(or),当运算符两边的表达式的结果其中一个为true时,整个运算结果为true。
- ||是短路运算符。即如果||左边的表达式结果为true,右边的表达式就会被短路掉,不会参与运算。例如,下面代码,左边a >= 1满足,则不再运算右侧的表达式,所以输出结果b = 2。
int a = 1;
int b = 2;
if (a >= 1 || ++b > 2) {
System.out.println("进入if循环");
}
System.out.println("a = " + a + ", b = " + b);
输出结果:进入if循环
a = 1, b = 2
- |为位运算符。符号两边的表达式一定都会运算。例如,下面代码可以看出a >= 1为true,则右边的表达式也会正常运算,因此输出结果b = 3.
int a = 1;
int b = 2;
if (a >= 1 | ++b > 2) {
System.out.println("进入if循环");
}
System.out.println("a = " + a + ", b = " + b);
输出结果:进入if循环
a = 1, b = 3
- |还可以做位运算符,当|操作符两边的表达式不是boolean类型时,|表示按位或操作。运算规则(有1则为1)
总结:
||和&&是短路运算符,进行的计算较少,因此在代码运行过程中效率更高,在后续开发中更推荐使用短路运算符。
备注:
在回答面试官的问题时,可以按照上面的逻辑。先分析相同的地方,再分析不同的地方,最后进行总结。在回答问题时,可以加一个例子,显得自己理解得比较透彻、清晰。