- 长路与运算 &
- 短路与运算 &&
- 长路或运算 |
- 短路或运算 ||
长路与运算 &
运行如下程序:
public class LogicCalculate {
public static void main(String[] args) {
int int1 = 1;
int int2 = 2;
int res1 = int1 & int2;
boolean res2 = int1>0 & int2<3 ;
System.out.println(res1);
System.out.println(res2);
}
}
返回结果为:
0
true
对于长路与运算 &:
- 当运算符两边都是整数时,会进行逐位与运算(二进制逻辑运算);当两边是关系运算时,是逻辑运算。
2.长路与运算会将两边的关系运算结果都计算出来(不明白的话看到下面的短路与运算就知道了)。
短路与运算 &&
简单修改上面的代码运行如下程序:
public class LogicCalculate {
public static void main(String[] args) {
int int1 = 1;
int int2 = 2;
int res1 = int1 && int2;
boolean res2 = int1>0 && int2<3 ;
System.out.println(res1);
System.out.println(res2);
}
}
上面的代码会在 int res1 = int1 && int2;
处报错,报错信息为‘&&’操作符不能被用于int,int。显然,短路运算符不支持按位逻辑运算。
运行如下代码
public class LogicCalculate {
public static void main(String[] args) {
int int1 = 1;
int int2 = 2;
boolean res2 = int1<0 && int2<3 ;
System.out.println(res2);
}
}
运行结果为 false
短路与运算 && 与长路与运算 &的区别在于:
- 短路运算不支持按位运算。
- 如果左条件为false,
&&
运算将不会再继续计算右边关系表达式,这样能提高程序的效率。
长路或运算 |
运行如下代码:
public class LogicCalculate {
public static void main(String[] args) {
int int1 = 1;
int int2 = 2;
int res1 = int1 | int2;
boolean res2 = int1>0 | int2<1;
System.out.println(res1);
System.out.println(res2);
}
}
运行结果为:
3
true
对于长路或运算 |:
当运算符两边都是整数时,会进行按位或运算(二进制逻辑运算);当两边是关系运算时,是逻辑运算。
2.长路或运算会将两边的关系运算结果都计算出来,不管左边的关系表达式是不是true。
短路或运算 ||
简单修改上面的代码运行如下程序:
public class LogicCalculate {
public static void main(String[] args) {
int int1 = 1;
int int2 = 2;
boolean res1 = int1>0 || int2<1;
System.out.println(res1);
}
}
运行结果为 true
短路与运算 || 与长路与运算 | 的区别在于:
- 短路运算不支持按位运算。
- 如果左条件为True, || 运算将不会再继续计算右边关系表达式,这样能提高程序的效率。
结论:
- 长路逻辑运算支持按位运算,而短路运算不支持。
- 短路逻辑运算相较于长路逻辑运算,效率更高,因此进行逻辑运算时应当使用短路逻辑运算符。