逻辑运算符
特点:逻辑运算符两边一般是boolean类型的数据或者是表达式。
![](https://i-blog.csdnimg.cn/blog_migrate/571dd8be23ea88a21482f4742a87aa89.png)
总结:&,|,^,!
- &逻辑与运算符:左右两边有一个是false ,则输出结果为false。
- | 逻辑或运算符:左右两边有一个是true,则输出结果为true。
- ^ 逻辑异或运算符:左右两边Boolean类型相同,输出结果为是false,左右两边Boolean类型不相同,输出结果为是true。
- ! 逻辑非运算符:将Boolean类型的值取反,并输出。(true变成false,false变成true)
程序举例
public class OptLuoJiDemo1 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
// & 逻辑与运算
System.out.println((a>c) & (a>b)); // false & false = false
System.out.println((a>b) & (a<c)); // false & true = false
System.out.println((a<b) & (a>c)); // true & false = false
System.out.println((a<b) & (a<c)); // true & true = true
// | 逻辑或运算
System.out.println((a>c) | (a>b)); // false | false = false
System.out.println((a>b) | (a<c)); // false | true = true
System.out.println((a<b) | (a>c)); // true | false = true
System.out.println((a<b) | (a<c)); // true | true = true
// ^ 逻辑异或运算
System.out.println((a>c) ^ (a>b)); // false ^ false = false
System.out.println((a>b) ^ (a<c)); // false ^ true = true
System.out.println((a<b) ^ (a>c)); // true ^ false = true
System.out.println((a<b) ^ (a<c)); // true ^ true = false
// ! 逻辑非运算
System.out.println(!((a<b) ^ (a>c))); // true ^ false = true
System.out.println(!((a<b) ^ (a<c))); // true ^ true = false
}
}
总结:&&,||
- &&逻辑双与运算符(又称为短路与):1、单纯从输出结果上来看,&&与&的结果是一样的。2、&&左边如果是false,输出结果就是false,不会执行右边的内容。
- ||逻辑双或运算符(又称为短路或):1、单纯从输出结果上来看,|| 与 | 的结果是一样的。2、|| 左边如果为true的时候,输出结果就是true,不会执行右边的内容。
程序举例
public class OptLuojiDemo2 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
System.out.println((a>c) & (a>b)); // false & false = false
System.out.println((a>b) & (a<c)); // false & true = false
System.out.println((a<b) & (a>c)); // true & false = false
System.out.println((a<b) & (a<c)); // true & true = true
//逻辑双与操作
System.out.println((a > c) && (a > b)); // false && false = false
System.out.println((a > b) && (a < c)); // false && true = false
System.out.println((a < b) && (a > c)); // true && false = false
System.out.println((a < b) && (a < c)); // true && true = true
int x = 3;
int y = 4;
boolean bool1 = ((x++ == 3) & (y++ ==4));
System.out.println(bool1); // & 两边都是true,所以输出结果bool1为true。
System.out.println(x); // ++在x后面,所以先做关系运算符==,之后在自增1。x输出结果为4。
System.out.println(y); //同理
boolean bool2 = ((x++ == 5) && (y++ ==4));
System.out.println(bool2); // && 输出Boolean类型的结果和 & 一样。false && true➡false。
System.out.println(x); // ++在x后面,所以先做关系运算符==,之后在自增1。x输出结果为4。
System.out.println(y); // && 左边值为false ,所以右边内容不执行。输出y=4。
boolean bool3 = ((x++ == 5) | (y++ ==4));
System.out.println(bool3); // | 左边是false ,右边是true。所以输出结果为true。
System.out.println(x); //输出x=4
System.out.println(y); //输出y=5
boolean bool4 = ((x++ == 3) || (y++ == 8));
System.out.println(bool4); // || 左边是true,右边是false。所以输出结果是true。
System.out.println(x); //输出x=4
System.out.println(y); // 因为 || 左边结果是true,所以右边内容不执行。输出y=4。
}
}
注意:
在Java中不可以写成3<x<6,应该写成x>3 & x<6。