逻辑运算符
1. 基本语法
a | b | a&b | a && b | a | b | a || b | !a | a ^ b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
其中,逻辑运算符的含义如下:
- "a&b"表示逻辑与运算,只有当a和b都为true时,结果才为true,否则为false。
- "a && b"表示逻辑与运算,只有当a和b都为true时,结果才为true,否则为false。
- "a | b"表示逻辑或运算,只有当a和b都为false时,结果才为false,否则为true。
- "a || b"表示逻辑或运算,只有当a和b都为false时,结果才为false,否则为true。
- "!a"表示逻辑非运算,将a的结果取反,即当a为true时,结果为false,当a为false时,结果为true。
- “a ^ b"表示逻辑异或运算,只有当a和b不相同时,结果才为true,否则为false。理解:异或,追求的是"异”!
注意:
- 逻辑运算符,操作的都是boolean类型的变量或常量,而且运算的结果也是boolean类型的值
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3 < x < 6 ,应该写成x > 3 & x < 6。
- |: 逻辑或 ||: 短路或
- &: 逻辑与 &&: 短路与
/**
测试运算符的使用4: 逻辑运算符
1. &(单与) &&(双与) |(逻辑或) ||(短路或) ! ^
2. 说明:
① 逻辑运算符针对的都是boolean类型的变量进行的操作
② 逻辑运算符运算的结果也是boolean类型
③ 逻辑运算符常使用条件判断结构,循环结构中
*/
class LogicTest{
public static void main(String[] args){
/**
区分:& 和 &&
相同点:两个符号表达的都是"且"的关系。只有当符号左右两边的类型值均为true时,结果才为true。
执行过程:
1)如果符号左边是true,则&、&& 都会执行符号右边的操作
2)如果符号左边是false,则& 会继续执行符号右边的操作,而&& 不会继续执行符号右边的操作(短路行为)
3)开发中,我们建议使用&&
*/
boolean b1 = true;
int num1 = 10;
if(b1 & (num1++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num1 = " + num1);
boolean b2 = true;
int num2 = 10;
if(b2 && (num2++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num2 = " + num2);
// 输出结果都为床前明月光、11;
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num1 = " + num1);
// 输出结果为"我叫郭德纲"
// num1 = 11
boolean b2 = true;
b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num2 = " + num2);
// 输出结果为"我叫郭德纲"
// num2 = 10
}
}
class LogicTest{
public static void main(String[] args){
/**
区分:| 和 ||
1. 相同点:两个符号表达的都是"或"的关系。只要符号两边存在true的情况,结果就为true。
2. 执行过程:
1)如果符号左边是false,则|、|| 都会执行符号右边的操作
2)如果符号左边是true,则|会继续执行符号右边的操作,而 || 不会继续执行符号右边的操作(短路行为)
3)开发中,我们建议使用||
*/
boolean b3 = false;
int num3 = 10;
if(b3 | (num3++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num3 = " + num3);
boolean b4 = false;
int num4 = 10;
if(b4 || (num4++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num4 = " + num4);
// 输出结果都为床前明月光、11;
boolean b3 = false;
b3 = true;
int num3 = 10;
if(b3 | (num3++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num3 = " + num3);
// 输出结果为"床前明月光"
// num3 = 11
boolean b4 = false;
b4 = true;
int num4 = 10;
if(b4 || (num4++ > 0 )){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num4 = " + num4);
// 输出结果为"床前明月光"
// num4 = 10
}
}
案例1:
- 定义类CompareLogicExer
- 定义main方法
- 定义一个int类型变量a,变量b,都赋值为20
- 定义boolean类型变量bo1,判断++a 是否被3整除,并且 a++ 是否被7整除,将结果赋值给bo1
- 输出a的值,bo1的值
- 定义boolean类型变量bo2,判断b++是否被3整除,并且++b 是否被7整除,将结果赋值给bo2
- 输出b的值,bo2的值
class CompareLogicExer{
public static void main(String[] args){
int a = 20, b = 20;
boolean bo1 = (++a % 3 == 0) && (a++ % 7 == 0);
// &&的优先级比=要高
System.out.println("a = " + a + ",bo1 = " + bo1);
// 输出结果是a = 22, bo1 = true
boolean bo2 = (b++ % 3 == 0) & (++b % 7 == 0);
System.out.println("b = " + b + ",bo2 = " + bo2);
// 输出结果是b = 21, bo2 = false
}
}
案例2:程序输出
class Test{
public static void main(String[] args){
boolean x = true;
boolean y = false;
short z = 42;
if((z++ == 42) && (y = true)){
// z先比较,再赋值,即前半部分是true,后半部分是true,则结果为true;此时z为43;
z++; // 此时z的值为44
}
if((x = false) || (++z) == 45)){
// 此时x为false,后半部分先赋值,再比较,此时z的值为45,则为true,则结果为true
z++; // 此时z的值为46
}
System.out.println("z = " + z);
// 输出结果为46
}
}
技巧:
写代码要写一点,跑一点儿;而不是全部写完再跑代码。