逻辑运算符
基本语法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8J1lIcXw-1689483231249)(F:\BaiduNetdiskDownload\image-20220312001943403.png)]
-
逻辑运算符,操作的都是boolean类型的变量或常量,而且运算得结果也是boolean类型的值
-
运算符说明:
- &和&&:表示“且”关系,当符号左右两边布尔值都是true时,结果才能为true。否则为false
- |和||:表示“或”关系,当符号两边布尔值有一边为true时,结果为true。当两边都为false时,结果为false
- !:表示“非”关系,当变量布尔值为true时,结果为false。当变量布尔值为fasle时,结果为true
- ^:当符号左右两边布尔值不同时,结果为true。当两边布尔值相同时,结果为false
- 理解:异或,追求的是“异”
-
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成 x > 3 & x < 6
-
区分“&”和“&&”;
-
相同点:如果符号左边是true,则二者都执行符号右边的操作
-
不同点:&:如果符号左边是false,则继续执行符号右边的操作
&&:如果符号左边是false,则不在继续执行符号右边的操作
-
建议:开发中,推荐使用&&
-
-
区分“|”和“||”:
-
相同点:如果符号左边是false,则二者都执行符号右边的操作
-
不同点: | :如果符号左边是true,则继续执行符号右边的操作
||:如果符号左边是true,则不在继续执行符号右边的操作
-
建议:开发中,推荐使用||
-
代码举例:
/*
比较运算符
1.& && | || ! ^
2.说明
①逻辑运算符针对的都是boolean类型的变量进行的操作
②逻辑运算符运算的结果也是boolean类型
③逻辑运算符常常使用条件判断结构、循环结构中
*/
class LogicTest{
public static void main(String[] args){
/*
区分:& 和 &&
相同点:两个符号表达的都是“且”的关系。只有当符号左右两边的类型值均为true时,结果才为true
执行过程:
1)如果符号左边是true,则& && 都会执行符号右边的操作
2)如果符号左边是false,则&会执行符号右边的操作, 逻辑&
而&&不会执行符号右边的操作 短路&&
3)开发中,我们推荐使用短路&&
*/
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); //我叫郭德纲 num1 = 10 &&前为false直接结束,不执行后面的操作
//*******************************************************
/*
区分:| 和 ||
相同点:两个符号表达的都是“或”的关系。只要符号两边存在true的情况,结果就为true
执行过程:
1)如果符号左边是true,则|会执行符号右边的操作,而||不会执行符号右边的操作
2)如果符号左边是false,则| ||都会执行符号右边的操作,
3)开发中,我们推荐使用短路||
*/
boolean b3 = false;
int num3 = 10;
if(b3 | (num3++ > 0)){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num3 = "+ num3); //输出:床前明月光 num3 = 11
boolean b4= false;
int num4 = 10;
if(b4 || (num4++ > 0)){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num4 = "+ num4); //输出:床前明月光 num4 = 11
boolean b5 = false;
b5 = true;
int num5 = 10;
if(b5 | (num5++ > 0)){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num5 = "+ num5); //输出:床前明月光 num5 = 11
boolean b6 = false;
b6 = true;
int num6 = 10;
if(b6 || (num6++ > 0)){
System.out.println("床前明月光");
}else{
System.out.println("我叫郭德纲");
}
System.out.println("num6 = "+ num6); //输出:床前明月光 num6 = 10
}
}
案例与练习
案例:
1. 定义类 CompareLogicExer
2. 定义 main方法
3. 定义一个int类型变量a,变量b,都赋值为20
4. 定义boolean类型变量bo1 , 判断++a 是否被3整除,并且a++ 是否被7整除,将结果赋值给bo1
5. 输出a的值,bo1的值
6. 定义boolean类型变量bo2 , 判断b++ 是否被3整除,并且++b 是否被7整除,将结果赋值给bo2
7. 输出b的值,bo2的值
public class CompareLogicExer{
public static void main(String[] args){
int a;
int b;
a = 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
}
}
练习1:区分&和&&
int x = 1;
int y = 1;
if(x++ == 2 & ++y == 2){
x = 7;
}
System.out.println("x=" + x + ",y=" + y); //2 2
int x = 1,y = 1;
if(x++ == 2 && ++y == 2){
x =7;
}
System.out.println("x="+x+",y="+y); //2 1
练习2:区分 | 和 ||
int x = 1,y = 1;
if(x++==1 | ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); //7 2
int x = 1,y = 1;
if(x++==1 || ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y); //7 1
练习3:程序输出
class Test {
public static void main (String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
if ((z++ == 42) && (y = true)) { //z = 43 注意此处的是 = 赋值 不是==判断
z++; //z = 44
}
if ((x = false) || (++z == 45)) { //++z = 45
z++; //z++ = 46
}
System.out.println("z=" + z); //z = 46
}
}
= 赋值 不是==判断
z++; //z = 44
}
if ((x = false) || (++z == 45)) { //++z = 45
z++; //z++ = 46
}
System.out.println("z=" + z); //z = 46
}
}