算术运算符
算术运算符用于执行数学计算。
基本算术运算符
加减乘除
Java
int a = 10, b = 3;
// 加法
int sum = a + b; // 13
// 减法
int diff = a - b; // 7
// 乘法
int product = a * b; // 30
// 除法
int quotient = a / b; // 3(整数除法截断)
// 取模(求余)
int remainder = a % b; // 1
浮点数运算
Java
double x = 10.0, y = 3.0;
double result1 = x / y; // 3.333...
double result2 = x % y; // 1.0
// 浮点数除法保留精度
int a = 10, b = 3;
double result = a / b; // 3.0(整数除法结果转为double)
double result2 = 10.0 / 3; // 3.333...(浮点除法)
除法注意事项
整数除法截断
Java
// 整数除法:截断小数部分
int a = 7 / 2; // 3(不是3.5)
int b = 7 / 3; // 2
// 想保留小数:使用浮点数
double c = 7.0 / 2; // 3.5
double d = 7 / 2.0; // 3.5
double e = (double) 7 / 2; // 3.0(7先转为double,再除2)
除零异常
Java
int a = 10;
// 整数除零:抛异常
// int b = a / 0; // ArithmeticException: / by zero
// 浮点除零:返回Infinity
double c = 10.0 / 0; // Infinity(无穷大)
double d = -10.0 / 0; // -Infinity
double e = 0.0 / 0; // NaN(非数值)
取模运算
取模规则
Java
// 取模:求余数
10 % 3 // 1
10 % 5 // 0
7 % 2 // 1
// 负数取模
-10 % 3 // -1(结果符号与左操作数相同)
10 % -3 // 1
-10 % -3 // -1
// 浮点取模
10.5 % 3.0 // 1.5
取模应用场景
Java
// 判断奇偶
int n = 7;
if (n % 2 == 0) {
// 偶数
} else {
// 奇数
}
// 循环计数(周期性)
for (int i = 0; i < 10; i++) {
if (i % 3 == 0) {
System.out.println("每隔3个");
}
}
// 数字拆分
int num = 12345;
int lastDigit = num % 10; // 5(取最后一位)
自增自减运算符
自增运算符++
Java
int a = 5;
// 后置自增:先用后增
int b = a++; // b = 5, a = 6
// 先取a的值赋给b,再让a自增
// 前置自增:先增后用
int c = ++a; // c = 7, a = 7
// 先让a自增,再取值赋给c
自减运算符--
Java
int a = 5;
// 后置自减:先用后减
int b = a--; // b = 5, a = 4
// 前置自减:先减后用
int c = --a; // c = 3, a = 3
前置后置区别
| 运算符 | 执行顺序 | 示例 |
|---|---|---|
| a++ | 先用后增 | b=a++; b=5,a=6 |
| ++a | 先增后用 | b=++a; b=6,a=6 |
| a-- | 先用后减 | b=a--; b=5,a=4 |
| --a | 先减后用 | b=--a; b=4,a=4 |
Java
// 实例对比
int x = 5;
int y = x++; // y = 5, x = 6
int z = 5;
int w = ++z; // w = 6, z = 6
// 循环中常见
for (int i = 0; i < 5; i++) {
// i++:循环后自增
}
运算符优先级
算术优先级
Java
优先级(从高到低):
1. ++、--(自增自减)
2. *、/、%(乘除取模)
3. +、-(加减)
// 括号改变优先级
int result = 2 + 3 * 4; // 14(先乘后加)
int result2 = (2 + 3) * 4; // 20(括号优先)
复合表达式
Java
int a = 5, b = 3, c = 2;
int result = a + b * c - a / b;
// 计算顺序:b*c=6, a/b=1, a+6-1=10
// 使用括号明确顺序
int result2 = (a + b) * (c - a) / b;
算术运算符总结表
| 运算符 | 说明 | 示例 |
|---|---|---|
| + | 加法 | 5 + 3 = 8 |
| - | 减法 | 5 - 3 = 2 |
| * | 乘法 | 5 * 3 = 15 |
| / | 除法 | 5 / 3 = 1 |
| % | 取模 | 5 % 3 = 2 |
| ++ | 自增 | a++ 或 ++a |
| -- | 自减 | a-- 或 --a |
类型提升
自动类型提升
text
// 小类型与大类型运算,提升为大类型
int a = 5;
double b = 3.0;
double result = a + b; // int提升为double
// byte/short/char运算提升为int
byte x = 10, y = 20;
int sum = x + y; // byte运算结果为int
// byte sum2 = x + y; // 编译错误
byte sum3 = (byte)(x + y); // 需强转
要点总结
- 加减乘除:+、-、*、/
- 取模运算:%(求余数)
- 整数除法截断小数部分
- 整数除零抛ArithmeticException
- 浮点除零返回Infinity或NaN
- 自增:++a先增后用,a++先用后增
- 自减:--a先减后用,a--先用后减
- 乘除优先级高于加减
- 括号可改变运算优先级
- 不同类型运算自动提升为大类型
- byte/short/char运算提升为int
📝 发现内容有误?点击此处直接编辑