Java 入门:运算符 与 逻辑控制(适合零基础新手)
这是 Java 学习的最早期核心内容之一。掌握运算符和流程控制后,你就能写出有判断、有循环、有选择的程序了(比如猜数字游戏、成绩分级、打印图案等)。
我们按从简单到复杂的顺序讲解,配大量代码示例和常见错误提醒。所有示例都用 JDK 8+(2026 年主流仍兼容)。
1. 运算符总览(分类记忆法)
| 类别 | 符号示例 | 优先级(从高到低) | 作用简述 | 常见陷阱 |
|---|---|---|---|---|
| 算术 | + – * / % ++ — | 高 | 数学计算 | / 整数除法丢小数、自增自减前后置 |
| 关系(比较) | > >= < <= == != | 中 | 比较大小,返回 boolean | == 不要用于对象(除字符串常量池外) |
| 逻辑 | && | ! ^ | 中 | |
| 位运算 | & | ^ ~ << >> >>> | 低 | 二进制位操作(很少初学用) |
| 赋值 | = += -= *= /= %= <<= >>= &= | = ^= | 最低 | 赋值 + 复合运算 |
| 三元(条件) | 条件 ? 表达式1 : 表达式2 | 中 | 简洁 if-else | 两边类型要兼容 |
| 其他 | instanceof、new、.、[]、() | — | — | — |
口诀记忆优先级:
先括号 → 算术(++ –) → 关系 → 逻辑(!) → 条件 → 赋值
2. 算术运算符(最常用)
public class OperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3 (整数除法,向下取整)
System.out.println(a % b); // 1 (余数)
// 特殊:小数参与运算
double c = 10.0 / 3; // 3.3333333333333335
System.out.println(c);
// 自增自减(最容易错!)
int x = 5;
System.out.println(x++); // 5 先用后加 → 输出5,x变成6
System.out.println(++x); // 7 先加后用 → x先+1变成7,再输出7
// 经典面试题
int i = 1;
i = i++; // i最终还是1(坑!)
System.out.println(i); // 1
// 正确理解:i++ 是先把旧值给临时变量,再自己+1
// 所以 i = i++; 相当于 临时 = i; i = i+1; i = 临时;
}
}
最常见错误:
- 以为 10 / 3 = 3.333 → 错!整数除法结果仍是整数
- 自增自减在表达式中混用(i = i++ + ++i) → 结果不确定,千万别写!
3. 关系运算符 & 逻辑运算符(判断核心)
int age = 20;
boolean isAdult = age >= 18; // true
boolean isTeen = age > 12 && age < 20; // true
boolean hasMoney = true;
boolean canBuy = isAdult && hasMoney; // true
// 短路与 &&
int num = 0;
if (num != 0 && 10 / num > 2) { // 不会报错!因为 num!=0 为false,后面的不执行
System.out.println("不会除0");
}
// 短路或 ||
boolean isVIP = true;
if (isVIP || buySomething()) { // 如果 isVIP=true,buySomething()根本不执行
System.out.println("欢迎VIP");
}
短路 vs 非短路(非常重要!)
| 运算符 | 名称 | 特点 | 使用场景建议 |
|---|---|---|---|
| && | 短路与 | 左边false → 右边不执行 | 99% 情况用这个 |
| & | 逻辑与 | 两边都执行(可能除0) | 极少用(位运算时才用) |
| 短路或 | |||
| 逻辑或 | 两边都执行 | ||
| ! | 逻辑非 | 取反 | — |
| ^ | 逻辑异或 | 不同为true,相同为false | 判断两个布尔是否不同 |
4. if、if-else、if-else if-else(最基础分支)
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好"); // 85 → 良好
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
嵌套 if 示例(判断闰年)
int year = 2024;
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
System.out.println("闰年");
} else {
System.out.println("平年");
}
} else {
System.out.println("闰年");
}
} else {
System.out.println("平年");
}
5. switch(多分支选择)
Java 8 前:只能用 int、char、byte、short、枚举、String(Java 7+ 支持 String)
Java 14+ 新特性(switch 表达式 + 箭头语法 → 强烈推荐)
// 传统写法
String day = "星期三";
switch (day) {
case "星期一":
case "星期二":
case "星期三":
case "星期四":
case "星期五":
System.out.println("工作日");
break;
case "星期六":
case "星期日":
System.out.println("休息日");
break;
default:
System.out.println("输入错误");
}
// Java 14+ 推荐写法(更简洁,无需 break)
String type = switch (day) {
case "星期一", "星期二", "星期三", "星期四", "星期五" -> "工作日";
case "星期六", "星期日" -> "休息日";
default -> "输入错误";
};
System.out.println(type);
6. 循环(for、while、do-while)
// 1. for(最常用,知道次数)
for (int i = 1; i <= 5; i++) {
System.out.println("第 " + i + " 次");
}
// 2. while(不知道次数,根据条件)
int count = 0;
while (count < 3) {
System.out.println("while 循环:" + count);
count++;
}
// 3. do-while(至少执行一次)
int num = 10;
do {
System.out.println("do-while:" + num);
num++;
} while (num < 10); // 条件不成立,但仍执行一次
三种死循环写法(小心别写成这样)
// for(;;) { }
// while(true) { }
// do { } while(true);
continue & break(跳出/跳过)
for (int i = 1; i <= 10; i++) {
if (i == 5) continue; // 跳过本次,i=5 不打印
if (i == 8) break; // 直接结束整个循环
System.out.println(i);
}
7. 练习题(建议全部手写一遍)
- 判断一个数是奇数还是偶数
- 打印 1~100 内所有 3 的倍数
- 求 1+2+3+…+100 的和
- 九九乘法表(双重 for)
- 用 while 实现猜数字游戏(随机 1~100,提示大/小)
- 用 switch + 三元运算符判断成绩等级(优/良/中/及格/不及格)
掌握这些后,你已经能写出80% 的入门小程序了。
下一步推荐直接学习数组 → 方法 → 面向对象基础。
你现在卡在哪一部分?想看某个知识点的更多练习题 / 代码纠错 / 视频推荐,还是想直接进入数组章节?告诉我,我继续陪你学!