学习目标:
-
掌握Java中各类运算符的使用场景
-
理解运算符优先级规则
-
能够通过运算符解决实际计算问题
-
避免常见运算符误用导致的错误
一、课程引入
1.1 什么是运算符?
-
作用:对变量或值进行操作的符号(如加减乘除)
-
分类:
-
算术运算符(
+
,-
,*
,/
,%
) -
赋值运算符(
=
,+=
,-=
) -
比较运算符(
>
,==
,!=
) -
逻辑运算符(
&&
,||
,!
) -
位运算符(
&
,|
,^
) -
三目运算符(
? :
)
-
二、算术运算符
2.1 基本算术运算符
运算符 | 描述 | 示例 | 结果(假设a=10, b=3) |
---|---|---|---|
+ | 加法 | a + b | 13 |
- | 减法 | a - b | 7 |
* | 乘法 | a * b | 30 |
/ | 除法 | a / b | 3(整数除法) |
% | 取模(余数) | a % b | 1 |
案例1:学生成绩计算
int math = 85;
int english = 90;
int total = math + english;
double average = total / 2.0; // 必须用2.0避免整数除法错误
System.out.println("总分:" + total + ", 平均分:" + average);
案例2:判断奇偶性
int num = 7;
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
2.2 自增/自减运算符
运算符 | 描述 | 示例 | 结果(假设a=5) |
---|---|---|---|
++ | 自增 | a++ 或 ++a | a=6 |
-- | 自减 | a-- 或 --a | a=4 |
案例3:前后缀区别
int x = 5;
int y = x++; // y=5, x=6(先赋值后自增)
int z = ++x; // x=7, z=7(先自增后赋值)
三、赋值与比较运算符
3.1 赋值运算符
运算符 | 示例 | 等价于 |
---|---|---|
= | a = 10 | - |
+= | a += 5 | a = a + 5 |
-= | a -= 3 | a = a - 3 |
*= | a *= 2 | a = a * 2 |
案例4:商品价格累计
double price = 100.0;
price *= 0.8; // 打8折
System.out.println("折后价:" + price); // 80.0
3.2 比较运算符
运算符 | 描述 | 示例 | 结果(假设a=5, b=3) |
---|---|---|---|
== | 等于 | a == b | false |
!= | 不等于 | a != b | true |
> | 大于 | a > b | true |
< | 小于 | a < b | false |
>= | 大于等于 | a >= 5 | true |
案例5:判断闰年
int year = 2024;
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
System.out.println(year + "年是闰年吗?" + isLeapYear);
四、逻辑与位运算符
4.1 逻辑运算符
运算符 | 描述 | 示例 | 结果(假设a=true, b=false) | ||||
---|---|---|---|---|---|---|---|
&& | 逻辑与 | a && b | false | ||||
` | ` | 逻辑或 | `a | b` | true | ||
! | 逻辑非 | !a | false |
案例6:登录验证
String username = "admin";
String password = "123456";
boolean isValid = username.equals("admin") && password.equals("123456");
System.out.println("登录成功?" + isValid);
4.2 位运算符(了解即可)
运算符 | 描述 | 示例 | 结果(假设a=5=0101, b=3=0011) | ||
---|---|---|---|---|---|
& | 按位与 | a & b | 0001(1) | ||
` | ` | 按位或 | `a | b` | 0111(7) |
^ | 按位异或 | a ^ b | 0110(6) |
案例7:交换两个变量的值(不使用临时变量)
int x = 5, y = 3;
x = x ^ y;
y = x ^ y;
x = x ^ y;
System.out.println("x=" + x + ", y=" + y); // x=3, y=5
五、三目运算符与优先级
5.1 三目运算符
-
语法:
条件 ? 表达式1 : 表达式2
案例8:判断成绩等级
int score = 85;
String level = score >= 60 ? "及格" : "不及格";
System.out.println("成绩等级:" + level); // 及格
5.2 运算符优先级
优先级 | 运算符 | ||
---|---|---|---|
最高 | () 、++ 、-- | ||
↓ | * 、/ 、% | ||
↓ | + 、- | ||
↓ | > 、< 、>= 、<= | ||
↓ | == 、!= | ||
↓ | && 、` | ` | |
最低 | = 、+= 、-= |
案例9:优先级问题
int result = 5 + 3 * 2; // 结果是11,而非16
六、综合练习与错误分析
6.1 课堂练习
练习1:计算三角形面积
double base = 5.0;
double height = 3.0;
double area = 0.5 * base * height;
System.out.println("面积:" + area);
练习2:数字加密(位移运算)
int num = 1234;
int encrypted = (num * 10 + 5) ^ 0xFF; // 简单加密示例
System.out.println("加密后:" + encrypted);
6.2 错误代码分析
int a = 10;
int b = 0;
int c = a / b; // 错误:除零异常
boolean flag = 1; // 错误:boolean类型不能赋值为1
七、总结与练习
7.1 总结
-
核心运算符:算术、赋值、比较、逻辑、三目
-
易错点:整数除法、自增前后缀区别、逻辑短路特性
7.2 课后任务
-
编写程序计算一元二次方程根(ax²+bx+c=0)
-
使用三目运算符判断一个数是否为水仙花数
-
预习下一节课:控制结构(if-else、switch)
7.3 扩展挑战
-
用位运算实现两个整数的加法(禁止使用
+
运算符) -
答案在评论区