Java Number 与 Math 类
基本类型 int、double 不是对象,不能放进集合,也缺少现成的计算方法。Java 为每种基本类型都准备了对应的"包装类",再加上功能丰富的 Math 类,数值处理才完整又方便。
包装类一览
包装类把基本类型"包装"成对象,位于 java.lang 包,无需 import:
| 基本类型 | 包装类 | 基本类型 | 包装类 |
|---|---|---|---|
| byte | Byte | char | Character |
| short | Short | boolean | Boolean |
| int | Integer | float | Float |
| long | Long | double | Double |
自动装箱与拆箱
JDK5 起基本类型与包装类可自动转换:装箱是"基本类型 → 包装对象",拆箱反之。
public class BoxDemo {
public static void main(String[] args) {
Integer a = 100; // 自动装箱:int → Integer
int b = a + 1; // 自动拆箱:Integer → int
System.out.println(b); // 输出:101
}
}
Integer 常用方法
parseInt 把字符串解析成 int,valueOf 返回包装对象,toString 转回字符串。
// 片段需放进 main 方法中运行
int x = Integer.parseInt("123"); // 字符串 → int
Integer y = Integer.valueOf(456); // int → Integer 包装对象
String s = Integer.toString(789); // int → String
System.out.println(x + 100); // 输出:223(按数值相加)
System.out.println(s + 100); // 输出:789100(按字符串拼接)
字符串与数字互转
其他包装类用法一致:Double.parseDouble、Long.parseLong、Boolean.parseBoolean 等。
// 片段需放进 main 方法中运行
double d = Double.parseDouble("3.14");
long l = Long.parseLong("9999999999");
System.out.println(d); // 输出:3.14
System.out.println(String.valueOf(d) + 1); // 输出:3.141(字符串拼接)
System.out.println(l); // 输出:9999999999
Math 常用方法
Math 的全部方法都是静态的,直接用类名调用,不用创建对象:
| 方法 | 作用 | 示例结果 |
|---|---|---|
| abs(x) | 绝对值 | Math.abs(-6) → 6 |
| max(a,b) / min(a,b) | 较大 / 较小值 | Math.max(3,8) → 8 |
| pow(a,b) | a 的 b 次方 | Math.pow(2,3) → 8.0 |
| sqrt(x) | 平方根 | Math.sqrt(9) → 3.0 |
| round(x) | 四舍五入 | Math.round(3.6) → 4 |
| floor(x) / ceil(x) | 向下 / 向上取整 | Math.floor(3.8) → 3.0 |
| random() | 返回 [0,1) 随机小数 | 每次运行结果不同 |
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.abs(-6)); // 输出:6
System.out.println(Math.max(3, 8)); // 输出:8
System.out.println(Math.pow(2, 3)); // 输出:8.0
System.out.println(Math.sqrt(16)); // 输出:4.0
System.out.println(Math.round(3.6)); // 输出:4
int dice = (int) (Math.random() * 6) + 1; // 1~6 的随机整数
System.out.println("掷出点数:" + dice);
}
}
小结:包装类让基本类型能"对象化"使用,Integer 等提供类型转换的静态方法;数值计算交给 Math 即可。两者互相配合,Java 里的数字处理几乎无死角。