Java算术运算符 #

一、算术运算符概述 #

算术运算符用于执行数学运算,是最常用的运算符类型。

运算符 说明 示例
+ 加法 5 + 3 = 8
- 减法 5 - 3 = 2
* 乘法 5 * 3 = 15
/ 除法 5 / 3 = 1
% 取余 5 % 3 = 2
++ 自增 i++ 或 ++i
自减 i-- 或 --i

二、基本算术运算 #

2.1 加减乘除 #

java
int a = 10;
int b = 3;

System.out.println(a + b);  // 13
System.out.println(a - b);  // 7
System.out.println(a * b);  // 30
System.out.println(a / b);  // 3(整数除法)
System.out.println(a % b);  // 1(取余)

2.2 整数除法 #

java
// 整数除法:结果为整数(截断小数部分)
int result1 = 7 / 3;   // 2
int result2 = 7 / 2;   // 3

// 浮点除法:至少一个操作数为浮点数
double result3 = 7.0 / 3;  // 2.333...
double result4 = 7 / 3.0;  // 2.333...
double result5 = (double) 7 / 3;  // 2.333...

// 注意
System.out.println(1 / 2);    // 0
System.out.println(1.0 / 2);  // 0.5

2.3 取余运算 #

java
System.out.println(10 % 3);   // 1
System.out.println(10 % -3);  // 1(结果符号与被除数相同)
System.out.println(-10 % 3);  // -1
System.out.println(-10 % -3); // -1

// 应用:判断奇偶
int num = 7;
if (num % 2 == 0) {
    System.out.println("偶数");
} else {
    System.out.println("奇数");
}

// 应用:获取个位数
int n = 123;
int lastDigit = n % 10;  // 3

// 应用:循环索引
int index = (i + 1) % array.length;

三、自增自减运算符 #

3.1 基本用法 #

java
int i = 5;

// 自增
i++;  // i = 6
++i;  // i = 7

// 自减
i--;  // i = 6
--i;  // i = 5

3.2 前置与后置的区别 #

java
int a = 5;

// 后置:先使用,后自增
int b = a++;  // b = 5, a = 6
// 等价于:
// int b = a;
// a = a + 1;

int c = 5;
// 前置:先自增,后使用
int d = ++c;  // d = 6, c = 6
// 等价于:
// c = c + 1;
// int d = c;

3.3 表达式中的行为 #

java
int x = 5;
int y = x++ + ++x;
// 执行过程:
// x++: x = 5, 表达式值为5, x变为6
// ++x: x变为7, 表达式值为7
// y = 5 + 7 = 12
System.out.println(x);  // 7
System.out.println(y);  // 12

// 建议:避免复杂表达式中的自增自减
// 拆分为多行更清晰
int a = 5;
int temp1 = a++;
int temp2 = ++a;
int result = temp1 + temp2;

四、运算符优先级 #

算术运算符优先级从高到低:

  1. ++--(前置)
  2. */%
  3. +-
java
int result = 2 + 3 * 4;  // 14,不是20
int result2 = (2 + 3) * 4;  // 20,使用括号改变优先级

int a = 5;
int b = a++ + a * 2;
// a++: 5, a变为6
// a * 2: 6 * 2 = 12
// b = 5 + 12 = 17

五、特殊用法 #

5.1 字符串连接 #

+ 运算符可以连接字符串:

java
String s1 = "Hello" + " " + "World";  // "Hello World"
String s2 = "年龄: " + 25;  // "年龄: 25"

int a = 10;
int b = 20;
System.out.println("a + b = " + a + b);     // "a + b = 1020"
System.out.println("a + b = " + (a + b));   // "a + b = 30"

5.2 字符运算 #

java
char c1 = 'A';
char c2 = 'B';

// 字符参与运算时,使用其Unicode编码
System.out.println(c1 + 1);  // 66
System.out.println(c2 - c1); // 1

// 获取字符
char next = (char) (c1 + 1);  // 'B'

5.3 复合赋值运算符 #

java
int a = 10;

a += 5;   // a = a + 5;  → 15
a -= 3;   // a = a - 3;  → 12
a *= 2;   // a = a * 2;  → 24
a /= 4;   // a = a / 4;  → 6
a %= 4;   // a = a % 4;  → 2

// 复合赋值会自动进行类型转换
byte b = 10;
// b = b + 1;   // 错误:需要强制转换
b += 1;         // 正确:自动转换

六、数学运算示例 #

6.1 计算圆的面积和周长 #

java
double radius = 5.0;
double area = Math.PI * radius * radius;
double circumference = 2 * Math.PI * radius;

System.out.println("面积: " + area);
System.out.println("周长: " + circumference);

6.2 温度转换 #

java
// 摄氏度转华氏度
double celsius = 25;
double fahrenheit = celsius * 9 / 5 + 32;
System.out.println(fahrenheit);  // 77.0

// 华氏度转摄氏度
double f = 77;
double c = (f - 32) * 5 / 9;
System.out.println(c);  // 25.0

6.3 数字分解 #

java
int num = 1234;

int thousands = num / 1000;        // 1
int hundreds = num / 100 % 10;     // 2
int tens = num / 10 % 10;          // 3
int ones = num % 10;               // 4

System.out.printf("千位: %d, 百位: %d, 十位: %d, 个位: %d%n",
                  thousands, hundreds, tens, ones);

七、注意事项 #

7.1 整数溢出 #

java
int max = Integer.MAX_VALUE;
int overflow = max + 1;  // -2147483648(溢出)

// 使用long避免溢出
long safe = (long) max + 1;  // 2147483648

// 或使用Math.addExact检测溢出
try {
    int result = Math.addExact(max, 1);
} catch (ArithmeticException e) {
    System.out.println("溢出");
}

7.2 浮点精度 #

java
double a = 0.1 + 0.2;
System.out.println(a);  // 0.30000000000000004

// 使用BigDecimal进行精确计算
import java.math.BigDecimal;

BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.2");
BigDecimal sum = bd1.add(bd2);
System.out.println(sum);  // 0.3

7.3 除零问题 #

java
// 整数除以零:抛出异常
// int result = 10 / 0;  // ArithmeticException

// 浮点数除以零:返回无穷大或NaN
double d1 = 10.0 / 0;   // Infinity
double d2 = 0.0 / 0;    // NaN

// 安全除法
public static int safeDivide(int a, int b) {
    if (b == 0) {
        return 0;  // 或抛出异常
    }
    return a / b;
}

八、总结 #

运算符 说明 示例
+ 加法/字符串连接 5 + 3 = 8
- 减法 5 - 3 = 2
* 乘法 5 * 3 = 15
/ 除法 5 / 3 = 1
% 取余 5 % 3 = 2
++ 自增 i++ 或 ++i
自减 i-- 或 --i

算术运算符要点:

  • 整数除法结果为整数
  • 取余结果符号与被除数相同
  • 前置自增先加后用,后置自增先用后加
  • 注意整数溢出和浮点精度问题
最后更新:2026-03-26