一、运算符

1.1 算术运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int a = 10, b = 3;

int sum = a + b; // 13 加法
int diff = a - b; // 7 减法
int prod = a * b; // 30 乘法
int quot = a / b; // 3 除法(整数相除得整数,小数部分截断)
int mod = a % b; // 1 取余(取模)

// 自增自减
int x = 5;
x++; // 后置自增,x 变为 6(先用后加)
++x; // 前置自增,x 变为 7(先加后用)

int y = 5;
int m = y++; // m = 5, y = 6(先用后加)
int n = ++y; // n = 7, y = 7(先加后用)

1.2 赋值运算符

1
2
3
4
5
6
int a = 10;
a += 5; // a = a + 5 → 15
a -= 3; // a = a - 3 → 12
a *= 2; // a = a * 2 → 24
a /= 4; // a = a / 4 → 6
a %= 4; // a = a % 4 → 2

1.3 比较运算符

比较运算符的结果是 boolean 类型:

1
2
3
4
5
6
7
8
int a = 10, b = 20;

boolean eq = (a == b); // false,等于
boolean ne = (a != b); // true,不等于
boolean gt = (a > b); // false,大于
boolean lt = (a < b); // true,小于
boolean ge = (a >= b); // false,大于等于
boolean le = (a <= b); // true,小于等于

注意:引用类型用 equals() 比较内容,== 比较的是引用地址。

1
2
3
4
5
6
7
8
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false,地址不同
System.out.println(s1.equals(s2)); // true,内容相同

String s3 = "hello";
String s4 = "hello";
System.out.println(s3 == s4); // true,字符串池

1.4 逻辑运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
boolean a = true, b = false;

boolean and = a && b; // false,逻辑与(短路)
boolean or = a || b; // true,逻辑或(短路)
boolean not = !a; // false,逻辑非

// 短路特性:如果左边能确定结果,右边不执行
int x = 0;
boolean r = (x > 0) && (10 / x > 1); // 不会抛异常,右边没执行

// 非短路版本
boolean and2 = a & b; // 两侧都会执行
boolean or2 = a | b; // 两侧都会执行

1.5 位运算符

1
2
3
4
5
6
7
8
9
10
11
int a = 5;   // 0101(二进制)
int b = 3; // 0011(二进制)

int and = a & b; // 0001 = 1 按位与
int or = a | b; // 0111 = 7 按位或
int xor = a ^ b; // 0110 = 6 按位异或
int not = ~a; // 1010 = -6 按位取反

int left = a << 1; // 1010 = 10 左移(相当于 *2)
int right = a >> 1; // 0010 = 2 右移(相当于 /2)
int ur = a >>> 1; // 0010 = 2 无符号右移

1.6 三元运算符

1
2
3
4
// 条件 ? 表达式1 : 表达式2
int max = (a > b) ? a : b;

String status = (score >= 60) ? "及格" : "不及格";

二、条件分支

2.1 if-else

1
2
3
4
5
6
7
8
9
10
11
int score = 85;

if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}

2.2 switch

Java 14 之后,switch 支持箭头语法表达式返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 传统写法
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
default:
System.out.println("其他");
}

// 箭头语法(Java 14+)
switch (day) {
case 1 -> System.out.println("星期一");
case 2 -> System.out.println("星期二");
default -> System.out.println("其他");
}

// switch 表达式(Java 14+)
String dayName = switch (day) {
case 1 -> "星期一";
case 2 -> "星期二";
case 3 -> "星期三";
default -> "未知";
};

三、循环结构

3.1 for 循环

1
2
3
4
5
6
7
8
9
10
// 标准 for
for (int i = 0; i < 5; i++) {
System.out.println("i = " + i);
}

// 增强 for(for-each),遍历数组和集合
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}

3.2 while 循环

1
2
3
4
5
int count = 0;
while (count < 5) {
System.out.println("count: " + count);
count++;
}

3.3 do-while 循环

do-whilewhile 的区别在于:至少执行一次

1
2
3
4
5
int x = 10;
do {
System.out.println("至少会执行一次");
x++;
} while (x < 5); // 条件为 false,但循环体已执行了 1 次

3.4 break 与 continue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// break:跳出当前循环
for (int i = 0; i < 10; i++) {
if (i == 5) break;
System.out.print(i + " "); // 输出:0 1 2 3 4
}

// continue:跳过本次迭代,进入下一次
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
System.out.print(i + " "); // 输出:1 3 5 7 9
}

// 带标签的 break/continue(跳出多层循环)
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer;
System.out.println("i=" + i + ", j=" + j);
}
}
// 当 i=1, j=1 时,直接跳出外层循环

四、综合示例:九九乘法表

1
2
3
4
5
6
7
8
9
10
public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%d×%d=%-2d ", j, i, i * j);
}
System.out.println();
}
}
}

输出:

1
2
3
4
5
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81

本系列导航

  • (一)变量与数据类型
  • (二)运算符与流程控制 ← 当前
  • (三)面向对象编程基础