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 优先级顺序(由高到低)

  1. 增量运算符(++、--)
  2. 单目运算符(+、-)
  3. 乘除取余(*、/、%)
  4. 加减(+、-)

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

七、总结

  1. 基本运算符
    • +:加法或字符串拼接
    • -:减法或负数
    • *:乘法
    • /:除法(整数除法取整)
    • %:取余(余数符号与被除数一致)
  2. 增量运算符
    • ++:自增(前缀先增后用,后缀先用后增)
    • --:自减(前缀先减后用,后缀先用后减)
  3. 最佳实践
    • 复杂运算用括号明确顺序
    • 整数除法转浮点数避免精度丢失
    • 字符串拼接注意运算顺序
    • 避免在表达式中滥用自增 / 自减运算符

掌握算术运算符的使用规则和注意事项,是 Java 编程的基础技能,合理使用这些运算符可以编写高效、清晰的代码。

posted @ 2025-07-07 08:24  HuCiZhi  阅读(192)  评论(0)    收藏  举报