一、
逻辑运算符:
&: 与: 表示并且,当操作数A和B都为true结果才为true,否则结果result 是 false
&&: 短路与: 和 & 结果相同,具有短路效果,如果左边操作数A是false, result 一定为false,且不运算B的运算.
| : 或: 表示或者, A 和 B都为false结果result为false, 只要有A 或 B 是true, 结果就是true
|| : 短路或: 和 | 的结果相同,具有短路效果,如果左边操作数A 为true, result 一定为true, 且不运算B的运算.
^ : 判断A 和 B 是否不同,不同则为true, 相同 则为 false.
! : 取反, ! true 结果是false, ! false 结果是true.
1. & 和 && 的区别: 两者的结果是相同的
&: 如果A表达式为false, 也会判断B表达式. 然后返回false.
&&: 如果A表达式为false, 则不再判断B表达式, 直接返回false.
&: 用来处理二进制数据
&&: 效率更高( 开发中一般使用 && )
代码:
// 输出false,不会报异常. 说明不会 判断 1 / 0 == 1 表达式
System.out.println(false && (1 / 0 == 1));
// java.lang.ArithmeticException:/ zero 异常. 说明执行了 1 / 0 == 1 表达式
System.out.println(false & (1 / 0 == 1));
2. | 和 || 的区别:
| : 如果A表达式为true, 也会执行B表达式, 无论B表达式结果是什么. 都返回true
|| : 只要表达式为 true, 就不处理B表达式, 直接返回true
// 报异常. 说明会 判断 1 / 0 == 1 表达式
System.out.println(true | (1 / 0 == 1));
// 不会报异常: 没有执行了 1 / 0 == 1 表达式
System.out.println(true || (1 / 0 == 1));
3. ^ 异或 : 判断A 和 B 是否相同, 不同为true, 相同为 false.
System.out.println(true ^ true); // false
System.out.println(false ^ false); // false
System.out.println(true ^ false); // true
System.out.println(false ^ true); // true
4. ! 非 : !true = false ; !!true = ture.
5. &、|、^ 用来处理 二进制数据的时候使用, 开发中一般使用短路与,短路或.因为效率会更高.
// 3的二进制 : 00000011
// 5的二进制 : 00000101
/*
* & 00000011
* 00000101
* --------------
* 00000001 // 1
*/
System.out.println(3 & 5); // 1
/*
* | 00000011
* 00000101
* --------------
* 00000111 // 7
*/
System.out.println(3 | 5); // 7
/*
* ^ 00000011
* 00000101
* --------------
* 00000110 // 6
*/
System.out.println(3 ^ 5); // 6