逻辑运算符两边要求都是布尔类型,并且最终的运算结果也时布尔类型。
& 逻辑与(可以翻译成并且)
| 逻辑或(可以翻译成或者)
! 逻辑非(取反)
&& 短路与
|| 短路或
//对于逻辑与&运算符来说,只要一边是false,结果就是false
//只有两边同时为true,结果才是true
System.out.println(true & true);//true
System.out.println(true & false);//false
System.out.println(false & false);//false
//逻辑或|,只要有一边是true,结果就是true
System.out.println(true | true);//true
System.out.println(true | false);//true
System.out.println(false | true);//true
System.out.println(false | false);//false
短路与&&,短路或||
短路与&&和逻辑&有什么区别?
首先这两个运算符的运算结果没有任何区别,完全相同。只不过短路与&&会发生短路现象。
//什么是短路现象,什么时候会发生“短路”。
int x = 10;
int y = 11;
// 逻辑与&什么时候结果为true(两边都是true,结果才是true)
// 左边的 x>y 表达式结果已经是false了,其实整个表达式的结
// 结果已经确定是false了,按道理来说右边的表达式不应该执行。
System.out.println(x > y & x > y++);//false
// 通过这个测试得出:x > y++ 这个表达式执行了。
System.out.println(y); // 12
//测试短路与&&
int m = 10;
int n = 11;
// 使用短路与&&的时候,当左边的表达式为false的时候,右边的表达式不执行
// 这种现象被称为短路。
System.out.println(m > n && m > n++);//false
System.out.println(n); // 11
// || 短路或
// “或”的时候只要有一边是true,结果就是true。
// 所以,当左边的表达式结果是true的时候,右边的表达式不需要执行,此时会短路。