01_算数运算符(加 减 乘 除 ++ -- %)
一、算术运算符概述
算术运算符用于执行基本的数值运算,是 Java 中最常用的运算符之一。主要包括:
- 基本运算符:+(加)、-(减)、*(乘)、/(除)、%(取余)
- 增量运算符:++(自增)、--(自减)
这些运算符可以用于整数、浮点数等基本数据类型,部分运算符(如 +)也可用于字符串拼接。
二、基本算术运算符(+、-、*、/、%)
2.1 加法运算符(+)
- 功能:执行数值相加或字符串拼接
- 语法:操作数1 + 操作数2
- 示例:
int a = 5 + 3; // 结果8
double b = 2.5 + 1.5; // 结果4.0
String str = "Hello" + "World"; // 结果"HelloWorld"
- 注意事项:
- 当其中一个操作数为字符串时,执行拼接而非加法
- 整数相加可能溢出,需注意数据类型范围
int max = Integer.MAX_VALUE;
int overflow = max + 1; // 结果为-2147483648(溢出)
2.2 减法运算符(-)
- 功能:执行数值相减
- 语法:操作数1 - 操作数2
- 示例:
int diff = 10 - 3; // 结果7
double d = 5.0 - 2.5; // 结果2.5
- 注意事项:
- 可作为单目运算符表示负数(如-5)
int num = -10; // 负数
int result = -(-5); // 结果5(负负得正)
2.3 乘法运算符(*)
- 功能:执行数值相乘
- 语法:操作数1 * 操作数2
- 示例:
int product = 4 * 5; // 结果20
double area = 3.14 * 2 * 2; // 圆面积计算
- 注意事项:
整数相乘可能溢出,建议用 long 类型存储结果
int a = 100000;
int b = 200000;
long result = (long)a * b; // 避免int溢出
2.4 除法运算符(/)
- 功能:执行数值相除
- 语法:操作数1 / 操作数2
- 示例:
int quotient = 10 / 3; // 结果3(整数除法取整)
double d = 10.0 / 3; // 结果3.3333333333333335
- 注意事项:
- 整数除法会舍去小数部分,而非四舍五入
- 除数不能为 0,否则抛出ArithmeticException
int error = 10 / 0; // 运行时异常:ArithmeticException
2.5 取余运算符(%)
- 功能:获取除法运算的余数
- 语法:操作数1 % 操作数2
- 示例:
int rem = 10 % 3; // 结果1(10=3*3+1)
int negative = -10 % 3; // 结果-1(符号与被除数一致)
- 注意事项:
- 余数的符号与被除数一致
- 常用于判断奇偶性或循环周期计算
boolean isEven = num % 2 == 0; // 判断偶数
三、增量运算符(++、--)
3.1 自增运算符(++)
- 功能:将变量值加 1,分为前缀自增(++var)和后缀自增(var++)
- 语法:
int a = 5;
int b = ++a; // 前缀:先自增,再赋值(a=6, b=6)
int c = a++; // 后缀:先赋值,再自增(a=7, c=6)
- 示例:
int x = 10;
System.out.println(++x); // 输出11(x=11)
int y = x++;
System.out.println(y); // 输出11(y=11, x=12)
3.2 自减运算符(--)
- 功能:将变量值减 1,分为前缀自减(--var)和后缀自减(var--)
- 语法:
int a = 5;
int b = --a; // 前缀:先自减,再赋值(a=4, b=4)
int c = a--; // 后缀:先赋值,再自减(a=3, c=4)
- 示例:
int x = 10;
System.out.println(--x); // 输出9(x=9)
int y = x--;
System.out.println(y); // 输出9(y=9, x=8)
3.3 前缀与后缀的区别
| 类型 | 执行顺序 | 表达式值 | 变量最终值 |
|---|---|---|---|
| 前缀 ++ | 先自增,再参与运算 | 自增后的值 | 自增后的值 |
| 后缀 ++ | 先参与运算,再自增 | 自增前的值 | 自增后的值 |
| 前缀 -- | 先自减,再参与运算 | 自减后的值 | 自减后的值 |
| 后缀 -- | 先参与运算,再自减 | 自减前的值 | 自减后的值 |
3.4 特殊场景应用
- 循环计数器:
for (int i = 0; i < 5; i++) {
System.out.println(i); // 输出0-4
}
- 复合赋值:
int a = 5;
a += 3; // 等价于a = a + 3(a=8)
四、运算符优先级与结合性
4.1 优先级顺序(由高到低)
- 增量运算符(++、--)
- 单目运算符(+、-)
- 乘除取余(*、/、%)
- 加减(+、-)
4.2 结合性
- 增量运算符:从右到左(如a++)
- 乘除取余:从左到右(如a * b / c)
- 加减:从左到右(如a + b - c)
4.3 示例与注意事项
int a = 5;
int b = 2;
int c = a++ + --b * 2; // 计算顺序:
// 1. --b → b=1
// 2. 1*2=2
// 3. a++ → 取a=5参与运算,然后a=6
// 4. 5+2=7 → c=7
System.out.println(c); // 输出7
建议用括号明确运算顺序,避免依赖默认优先级
int result = (a + b) * c; // 明确先加后乘
五、算术运算符与数据类型转换
5.1 自动类型提升
当不同类型数据参与运算时,会自动提升为范围更大的类型:
byte b = 5;
int i = 10;
long l = b + i; // byte和int自动提升为long
5.2 强制类型转换
如需将结果转换为特定类型,需使用强制类型转换:
double d = 5.9;
int i = (int) d; // 结果为5(小数部分丢失)
5.3 示例:混合运算
int a = 10;
double b = 3.5;
float c = 2.0f;
// 运算顺序:a先转为double,c转为double,结果为double
double result = a + b * c; // 10 + 3.5*2.0 = 17.0
六、常见问题与最佳实践
6.1 整数除法的精度问题
- 问题:整数除法会舍去小数部分
- 解决:将其中一个操作数转为浮点数
int a = 5;
int b = 2;
double result = (double)a / b; // 结果2.5(正确)
int wrong = a / b; // 结果2(错误)
6.2 自增运算符在表达式中的副作用
- 问题:前缀 / 后缀自增会改变变量值,可能导致意外结果
- 建议:避免在复杂表达式中使用自增 / 自减运算符
// 不推荐(难以理解)
int x = 5;
int y = (x++) + (++x) - (x--); // 结果依赖执行顺序,可读性差
// 推荐(分步骤)
int x = 5;
x++; // x=6
int temp = ++x; // temp=7, x=7
temp -= x--; // temp=0, x=6
6.3 字符串拼接的陷阱
- 问题:+ 用于字符串拼接时,需注意运算顺序
- 示例:
int a = 10;
int b = 20;
System.out.println("结果:" + a + b); // 输出"结果:1020"
System.out.println("结果:" + (a + b)); // 输出"结果:30"(正确)
6.4 取余运算的符号问题
- 规则:余数符号与被除数一致
System.out.println(10 % 3); // 1(10=3*3+1)
System.out.println(-10 % 3); // -1(-10=3*(-4)+2?不,-10=3*(-4)+2 → 余数应为2?实际JVM实现为-1,因为-10 = 3*(-3) + (-1))
System.out.println(10 % -3); // 1
System.out.println(-10 % -3);// -1
七、总结
- 基本运算符:
- +:加法或字符串拼接
- -:减法或负数
- *:乘法
- /:除法(整数除法取整)
- %:取余(余数符号与被除数一致)
- 增量运算符:
- ++:自增(前缀先增后用,后缀先用后增)
- --:自减(前缀先减后用,后缀先用后减)
- 最佳实践:
- 复杂运算用括号明确顺序
- 整数除法转浮点数避免精度丢失
- 字符串拼接注意运算顺序
- 避免在表达式中滥用自增 / 自减运算符
掌握算术运算符的使用规则和注意事项,是 Java 编程的基础技能,合理使用这些运算符可以编写高效、清晰的代码。

浙公网安备 33010602011771号