Java 数字
Java 数字和包装类
Section titled “Java 数字和包装类”Java 提供了基本数据类型(byte、int、long、double、float、short、char、boolean)用于对性能要求较高的操作。它们直接存储值。
int i = 5000;double accountBalance = 13065.75;byte flags = 0xAF;然而,许多 Java API,特别是 Collections Framework,处理的是对象。为了弥合这一差距,Java 为每种基本类型提供了包装类(Integer、Long、Byte、Double、Float、Short、Character、Boolean)。这些类将基本类型值封装在一个对象中。
所有数字包装类(Integer、Long、Byte、Double、Float、Short)都扩展了抽象类 Number,提供了用于数字操作的常用方法。
自动装箱和自动拆箱
Section titled “自动装箱和自动拆箱”现代 Java 通过自动装箱(基本类型到包装类)和自动拆箱(包装类到基本类型)简化了基本类型与其包装对象之间的转换。编译器会自动处理这些转换。
示例:
public class TestAutoboxing {
public static void main(String[] args) { // 自动装箱:int 5 自动转换为 Integer 对象 Integer x = 5;
// 自动拆箱:Integer x 自动转换为 int 进行加法运算 x = x + 10; // x 变为 15(Integer 对象)
// 自动拆箱进行打印 System.out.println("x 的值: " + x);
// List 的示例(需要对象) java.util.List<Integer> numberList = new java.util.ArrayList<>(); numberList.add(100); // 自动装箱:int 100 -> Integer int firstNum = numberList.get(0); // 自动拆箱:Integer -> int System.out.println("列表中第一个数字: " + firstNum); }}输出:
Value of x: 15First number from list: 100NullPointerException:对null包装类引用进行自动拆箱会抛出NullPointerException。示例:Integer num = null; int i = num;// 抛出 NPE- 性能:在对性能敏感的循环中过度进行自动装箱/自动拆箱会创建不必要的对象并影响性能。
- 比较:使用
.equals()比较包装对象的值(Integer a = 1000; Integer b = 1000; a == b可能为 false,但a.equals(b)为 true)。对于对象,==比较的是对象引用,但由于对小范围值(-128 到 127)的缓存,它可能对该范围内的值看起来有效。
Number 类方法
Section titled “Number 类方法”包装类(Number 的子类)的实例提供了将其值转换为不同基本类型、进行比较等方法。还提供了用于解析和转换的静态工具方法。
| 类别 | 常用方法及说明 |
|---|---|
实例方法(作用于包装对象,例如 Integer i = 10;) | byte byteValue()、short shortValue()、int intValue()、long longValue()、float floatValue()、double doubleValue():将 Number 对象的值转换为指定的基本类型。int compareTo(WrapperType another):将此 Number 对象与参数进行数值比较。boolean equals(Object obj):将此 Number 对象与参数进行值相等性比较。 |
静态方法(作用于包装类,例如 Integer.parseInt(...)) | static WrapperType valueOf(primitive p) 或 static WrapperType valueOf(String s):返回表示指定基本类型或 String 值的包装对象(通常比构造函数更受欢迎)。static primitive parsePrimitive(String s)(例如,parseInt、parseDouble):将字符串参数解析为有符号的十进制基本类型。static String toString(primitive p):返回表示指定基本类型的 String 对象。 |
数学工具方法(java.lang.Math 和 java.lang.StrictMath 中的静态方法) | abs(a):返回绝对值。ceil(a):返回大于或等于参数且等于数学整数的最小 double 值。floor(a):返回小于或等于参数且等于数学整数的最大 double 值。rint(a):返回与参数最接近且等于数学整数的 double 值。round(a):返回与参数最接近的 long 或 int 值(取决于参数类型)。min(a, b):返回两个值中较小的一个。max(a, b):返回两个值中较大的一个。exp(a):返回 e 的 double 幂。log(a):返回一个 double 值的自然对数(以 e 为底)。pow(a, b):返回第一个参数的第二个参数次幂的值。sqrt(a):返回一个 double 值的正确舍入的正平方根。sin(a)、cos(a)、tan(a):三角函数(角度以弧度表示)。asin(a)、acos(a)、atan(a):反三角函数。atan2(y, x):返回从直角坐标 (x, y) 到极坐标 (r, theta) 转换得到的角 theta。toDegrees(a):将以弧度测量的角度转换为度。toRadians(a):将以度测量的角度转换为弧度。random():返回一个带有正号的 double 值,大于或等于 0.0 且小于 1.0。 |
对于高精度计算,特别是金融计算中不允许浮点数不准确的情况,请使用 java.math.BigDecimal 类。
接下来,我们将探讨 Character 包装类以及在 Java 中如何处理字符。