Java 中逻辑 & 和短路 && 的区别是: 逻辑 & 需要判断 & 符号左边和右边的两个条件, 而短路 &&, 如果 && 符号左边的是真, 才会判断右边; 如果 && 符号左边为假, 则走 else.
eg.
- public class Demo { public static void main (String [] args) {
- int a = 4;
- int b = 3;
- int c = 0;
- if(a<b & b/c == 0) { // 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- if(a>b & b/c == 0) { // 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- if(a>b && b/c == 0) { // 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- if(a<b && b/c == 0) {
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao"); // 输出 "wohenhao"
- }
- }
- }
上述代码中, 因为第一, 第二段输出里面, 因为是逻辑 &, 所以 & 符号左边和右边的条件都要判断, 其中有一个是假, 就不成立. 而其中 b/c, 因为除数是 0,, 所以输出时报错. 第三, 第四段输出, 因为是短路 &&, 所以只要 && 号左边的为假, 就会走 else,&& 符号左边的为真, 就会判断第二个条件. 所以第三段输出报错, 第四段输出 else 中的打印结果.
eg.
- public class Demo {
- public static void main (String [] args) {
- int a = 4;
- int b = 3;
- int c = 0;
- if(a<b & b/c == 0) { // 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- if(a>b | b/c == 0) { // 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- if(a>b || b/c == 0) {
- System.out.println("nihaoma"); // 输出 "nihaoma"
- }else {
- System.out.println("wohenhao");
- }
- if(a<b || b/c == 0) {// 报错
- System.out.println("nihaoma");
- }else {
- System.out.println("wohenhao");
- }
- }
- }
上述代码中, 第一第二个输出, 因为是逻辑 |, 所以两边都要判断, 有一个报错, 即报错. 第三第四个输出中, 因为是短路 ||, 所以第三段中, 第一个条件为真, 就不会继续判断第二个条件; 第四段中, 因为第一个为假, 需要判断把第二个, 因为第二个报错, 所以结果报错.
来源: http://www.bubuko.com/infodetail-2673183.html