运算符
运算符用于对变量和值进行操作,本课学习Java中的各种运算符。
算术运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 5 / 3 |
1(整数除法) |
% |
取余 | 5 % 3 |
2 |
++ |
自增 | i++ |
i增加1 |
-- |
自减 | i-- |
i减少1 |
示例:算术运算
JAVA
public class ArithmeticDemo {
public static void main(String[] args) {
int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3(整数除法,截断小数)
System.out.println("a % b = " + (a % b)); // 1
// 浮点除法
double c = 10.0, d = 3.0;
System.out.println("c / d = " + (c / d)); // 3.3333...
}
}
⚠️ 整数除法: 两个整数相除,结果还是整数,小数部分被截断。要得到小数结果,至少一个操作数要是浮点数。
自增自减
JAVA
int i = 5;
// 后置++:先使用,后增加
int a = i++; // a = 5, i = 6
// 前置++:先增加,后使用
int b = ++i; // b = 7, i = 7
赋值运算符
| 运算符 | 说明 | 示例 | 等价于 |
|---|---|---|---|
= |
赋值 | a = 5 |
— |
+= |
加后赋值 | a += 3 |
a = a + 3 |
-= |
减后赋值 | a -= 3 |
a = a - 3 |
*= |
乘后赋值 | a *= 3 |
a = a * 3 |
/= |
除后赋值 | a /= 3 |
a = a / 3 |
%= |
取余后赋值 | a %= 3 |
a = a % 3 |
示例:赋值运算
JAVA
public class AssignmentDemo {
public static void main(String[] args) {
int a = 10;
System.out.println("初始值: " + a); // 10
a += 5;
System.out.println("a += 5: " + a); // 15
a -= 3;
System.out.println("a -= 3: " + a); // 12
a *= 2;
System.out.println("a *= 2: " + a); // 24
a /= 4;
System.out.println("a /= 4: " + a); // 6
a %= 4;
System.out.println("a %= 4: " + a); // 2
}
}
比较运算符
比较运算符返回布尔值(true或false)。
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 5 > 3 |
true |
< |
小于 | 5 < 3 |
false |
>= |
大于等于 | 5 >= 5 |
true |
<= |
小于等于 | 5 <= 3 |
false |
示例:比较运算
JAVA
public class ComparisonDemo {
public static void main(String[] args) {
int a = 10, b = 20;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); // false
System.out.println("a < b: " + (a < b)); // true
System.out.println("a >= 10: " + (a >= 10)); // true
System.out.println("a <= 5: " + (a <= 5)); // false
}
}
逻辑运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
&& |
逻辑与 | true && false |
false |
|| |
逻辑或 | true || false |
true |
! |
逻辑非 | !true |
false |
逻辑运算真值表
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| true | true | true | true | false |
| true | false | false | true | false |
| false | true | false | true | true |
| false | false | false | false | true |
示例:逻辑运算
JAVA
public class LogicDemo {
public static void main(String[] args) {
int age = 25;
boolean hasID = true;
// 年龄大于18且有身份证
boolean canEnter = (age >= 18) && hasID;
System.out.println("可以进入: " + canEnter); // true
// 年龄小于12或大于60
boolean isSpecial = (age < 12) || (age > 60);
System.out.println("特殊人群: " + isSpecial); // false
// 逻辑非
boolean isAdult = age >= 18;
System.out.println("是成年人: " + isAdult); // true
System.out.println("不是成年人: " + !isAdult); // false
}
}
💡 短路求值:
&&如果左边为false,右边不会执行;||如果左边为true,右边不会执行。
三元运算符
三元运算符是if-else的简写形式。
JAVA
// 语法:条件 ? 值1 : 值2
int max = (a > b) ? a : b;
示例:三元运算符
JAVA
public class TernaryDemo {
public static void main(String[] args) {
int a = 10, b = 20;
// 求最大值
int max = (a > b) ? a : b;
System.out.println("最大值: " + max); // 20
// 判断奇偶
int num = 7;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(num + "是" + result); // 7是奇数
// 求绝对值
int x = -5;
int abs = (x >= 0) ? x : -x;
System.out.println("绝对值: " + abs); // 5
}
}
运算符优先级
优先级高的先执行,可以用括号改变优先级。
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1 | () |
括号 |
| 2 | ! ++ -- |
一元运算符 |
| 3 | * / % |
乘除取余 |
| 4 | + - |
加减 |
| 5 | < <= > >= |
比较 |
| 6 | == != |
相等比较 |
| 7 | && |
逻辑与 |
| 8 | || |
逻辑或 |
| 9 | ?: |
三元运算符 |
| 10 | = += -= 等 |
赋值 |
示例:优先级
JAVA
public class PrecedenceDemo {
public static void main(String[] args) {
// 乘法优先于加法
int result1 = 2 + 3 * 4;
System.out.println("2 + 3 * 4 = " + result1); // 14,不是20
// 用括号改变优先级
int result2 = (2 + 3) * 4;
System.out.println("(2 + 3) * 4 = " + result2); // 20
}
}
💡 建议: 复杂表达式多用括号,提高可读性,避免优先级错误。
类型提升
当不同类型的值混合运算时,小类型会自动提升为大类型。
JAVA
public class TypePromotion {
public static void main(String[] args) {
// int + long → long
int a = 10;
long b = 20;
long c = a + b;
// int + double → double
int d = 10;
double e = 3.14;
double f = d + e;
// byte + byte → int
byte g = 10;
byte h = 20;
// byte i = g + h; // 错误!结果是int类型
int i = g + h; // 正确
}
}
❓ 常见问题
Q ==和equals有什么区别?
A ==比较基本类型的值,比较引用类型的地址。equals比较对象的内容。字符串比较要用equals。
Q i++和++i有什么区别?
A i++先使用后增加,++i先增加后使用。单独使用时效果一样,在表达式中才有区别。
Q 为什么0.1 + 0.2 != 0.3?
A 浮点数有精度问题,0.1和0.2在二进制中无法精确表示。比较浮点数要用范围判断。
📖 小节
- 算术运算符:+ - * / % ++ --
- 赋值运算符:= += -= *= /= %=
- 比较运算符:== != > < >= <=
- 逻辑运算符:&& || !
- 三元运算符:条件 ? 值1 : 值2
- 运算符有优先级,复杂表达式多用括号
- 类型提升:小类型自动转为大类型
📝 作业
- 算术练习: 输入秒数,转换为"X小时X分X秒"格式
- 比较练习: 判断一个年份是否是闰年(能被4整除但不能被100整除,或能被400整除)
- 三元练习: 输入三个数,用三元运算符求最大值
下一课
下一课我们将学习 条件语句,让程序根据条件做出判断。



