逻辑运算符、位运算符、流程控制、循环

java 核心基础 2.26

逻辑运算符(四种)

只能用于 boolean 类型的数据运算,判断 boolean 数据之间的逻辑关系,包括与、或、非 3 种关系

运算符包括 &(与)、|(或)、&&(短路与)、||(短路或)、!(非)

  • A & B:只有当 A 和 B 都为 true,结果为 true,否则为 false
  • A | B:当 A 或者 B 有一个为 true,结果为 true,否则为 false
  • A && B:只有当 A 和 B 都为 true,结果为 true,否则为 false
  • A || B:当 A 或者 B 有一个为 true,结果为 true,否则为 false
  • ! A:如果 A 为 true,结果为 false

运算效率短路与和短路非效率更高

&运算需要先判断A的值,然后再判断B的值
而&&运算先判断A的值,如果A的值为false,则无需继续判断,则 A && B 为false

&运算

public class Test {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 11;
        System.out.println((num1++ == num2) & (++num1 == num2)));
        System.out.println(num1);
    }
}

输入结果:
flase
12

&&运算

public class Test {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 11;
        System.out.println((num1++ == num2) && (++num1 == num2));
        System.out.println(num1);
    }
}

输入结果:
false
11

可以看见num1只加了一次 1,在判断(num1++ == num2)的为false的时候就终止了

位运算符

位运算指的是对表达式以二进制为单位进行的运算

位运算符包含 &(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)

  • A & B:每一位数字一一对应,若都为 1,该位记作 1,否则为 0
  • A | B:每一位数字一一对应,只要有一个为 1,该位记作 1,否则为 0
  • A ^ B:每一位数字一一对应,相同记作 0,不同记作 1
  • A << B:A 乘以 2 的 B 次方,2 << 3
  • A >> B:A 除以 2 的 B 次方,2 >> 3

10 & 5 = 0 (1010 & 0101) =0000

10 | 5 = 15 (1010 | 0101) =1111

10 ^ 3 = 9 (1010 ^ 0011) =1001

2 << 3 = 16

2 >> 3 = 0

public class Test {
    public static void main(String[] args) {
        System.out.println("按位与 & ");
        System.out.println(10001 & 10101);
        System.out.println("按位或 | ");
        System.out.println(10001 | 10101);
        System.out.println("按位异或 ^ ");
        System.out.println(10001 ^ 10101);
        System.out.println("左移(乘以2的几次方) << ");
        System.out.println(2 << 3);
        System.out.println("右移(除以2的几次方) >> ");
        System.out.println(16 >> 2);
    }
}

输出结果:

image-20250226235249174

流程控制

switch-case 只能完成等值判断,switch 支持的数据类型 int、short、byte、枚举、String,不支持 boolean

switch(变量){
	case1:
		代码1;
	break;
	case2:
		代码2;
	break;
	case3:
		代码3;
	break;
}

if(变量 ==1){
    代码1;
} else if(变量 ==2){
    代码2;
} else if(变量 ==3){
    代码3;
}

if语句:

int placing = 2;
if(placing == 1){
    System.out.println("奖励2000元");
} else if(placing == 2){
    System.out.println("奖励1000元");
} else if(placing == 3){
    System.out.println("奖励500元");
} else {
    System.out.println("没有奖励");
}

switch语句:

int placing = 2;
switch (placing){
    case 1:
        System.out.println("奖励2000元");
        break;
    case 2:
        System.out.println("奖励1000元");
        break;
    case 3:
        System.out.println("奖励500元");
        break;
    default:
        System.out.println("没有奖励");
}

这两个输入的相同,但是swicth结构更加清晰

注意:switch - case的时候需要记住一定要加上break,不然逻辑会混乱,不会在选取到满足条件的语句之后进行中断
原因:在switch语句中,每个case分支后如果没有break,程序将继续执行后续的case和default块,直到遇到break或switch结构结束

例如:

int placing = 2;
switch (placing){
    case 1:
        System.out.println("奖励2000元");     
    case 2:
        System.out.println("奖励1000元");
    case 3:
        System.out.println("奖励500元");
    default:
        System.out.println("没有奖励"); 	
}

就会输出:

image-20250226235759150

循环

for,while,do-while,foreach

循环四要素

  • 初始化循环变量
  • 循环条件
  • 循环体
  • 更新循环变量

whiledo-while 的区别

while是先判断再执行,do-while是先执行一次再判断

int i = 10;
while(i < 10){
    System.out.println(i);
    i++;
}
System.out.println("end");
do{
    System.out.println(i);
}while (i < 10);

可以看见第一个while没有执行

但是do-while执行了

输出结果:

image-20250227104934809

foreach针对集合的遍历更加简便

public static void main(String[] args) {
    ArrayList<Object> objects = new ArrayList<>();
    objects.add("1");
    objects.add("2");
    objects.add("3");

    System.out.println("for-i循环");
    for (int i = 0; i < objects.size(); i++) {
        System.out.println(objects.get(i));
    }

    System.out.println("foreach循环");
    for (Object object : objects) {
        System.out.println(object);
    }
}

双重循环

一个循环的循环体是另外一个循环

public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++){
                System.out.println(i+" "+j);
            }
        }
    }

终止循环

break; 跳出整个循环

continue; 跳出本次循环,继续执行下一次循环

public static void main(String[] args) {
    int sum = 0;
    for (int i = 1; i < 200; i++){
        if( i % 2 == 0)
            break;
        sum++;
    }
    System.out.println("break");
    System.out.println(sum);

    int sum2 = 0;
    for (int i = 1; i < 200; i++){
        if( i % 2 == 0)
            continue;
        sum2++;
    }
    System.out.println("continue");
    System.out.println(sum2);
}

输出结果:

image-20250227110144368

posted @ 2025-02-27 11:20  述雾学java  阅读(14)  评论(0)    收藏  举报  来源