java短路运算符和逻辑运算符的区别


/*
* 逻辑运算符——不论是什么条件都要执行左右两边代码
* 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
* 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
*
* 并联电路两个开关只要有一个开关闭合,电路就会通。
* 类似于短路或(||),只要有其中一个为true(开关闭合)是就不必执行右边的代码
* 并联电路两个开关其中有一个开关没有闭合(false),电路不会通,要继续执行右边的代码。
*
* 串联电路(&&)原理是必须是两个开关都闭合电路才能通,所以原理可想而知咯!
* 左边的开关闭合(true)仍需判断右边的开关是否闭合,所会执行右边的代码。
* 左边的开关没有闭合(false) 不用执行右边的代码。
* 因为左边开关没有闭合!右边的开关无论是否闭合电路都不会通电,所以不执行右边的代码。
*
* ——不知不觉突然回顾了那么多年前的物理课知识,多少回忆涌上心头,
* 记得那时候拆了好多家里的电池,到处找小灯泡去连接电路,
* 有时候电路短路,弄的火光闪烁...
*/
int a = 0;
int b = 0;
int c = 0;
int d = 0;
/*
flag = true

逻辑或1
短路或0
逻辑与1
短路与1

flag = false

逻辑或1
短路或1
逻辑与1
短路与0
*/
boolean flag = false;

// | 和 || 的区别
if(flag | a++ > 10) {
System.out.println("逻辑或" + a);
}else {
System.out.println("逻辑或" + a);
}

if(flag || b++ >10) {
System.out.println("短路或" + b);
}else {
System.out.println("短路或" + b);
}
// & 和 && 的区别
if(flag & c++ > 10) {
System.out.println("逻辑与" + c);
}else {
System.out.println("逻辑与" + c);
}

if(flag && d++ >10) {
System.out.println("短路与" + d);
}else {
System.out.println("短路与" + d);
}

    推荐阅读