`Integer.valueOf()` 是 Java 中的一个静态方法,用于将基本数据类型 `int` 转换为对应的包装类对象 `Integer`,或者将表示整数的字符串转换为 `Integer` 对象。该方法有两个重载版本:
1. `public static Integer valueOf(int i)`:将一个 `int` 类型的参数转换为一个 `Integer` 对象。如果传入的整数值在 `-128` 到 `127` 之间(包含边界值),则直接返回缓存中的 `Integer` 对象;否则,创建并返回一个新的 `Integer` 对象。
2. `public static Integer valueOf(String s)`:将一个表示整数的字符串转换为一个 `Integer` 对象。如果字符串为空或为 `null`,则返回一个表示 `0` 的 `Integer` 对象。如果字符串格式不正确,无法解析为整数,则会抛出 `NumberFormatException` 异常。
示例代码
```java
public class IntegerDemo {
public static void main(String[] args) {
// 将 int 转换为 Integer
Integer i01 = 59;
int i02 = 59;
Integer i03 = Integer.valueOf(i01);
System.out.println(i01 == i03); // true,因为 i03 是 i01 缓存中的对象
// 将字符串转换为 Integer
String stringValue = "123";
Integer anotherIntegerValue = Integer.valueOf(stringValue);
System.out.println(anotherIntegerValue); // 123
// 尝试将空字符串转换为 Integer
Integer emptyStringInteger = Integer.valueOf("");
System.out.println(emptyStringInteger); // 0
// 尝试将非法字符串转换为 Integer
try {
Integer invalidStringInteger = Integer.valueOf("abc");
} catch (NumberFormatException e) {
System.out.println("Invalid string format"); // Invalid string format
}
}
}
```
性能考虑
`Integer.valueOf()` 方法利用了缓存机制,对于 `-128` 到 `127` 之间的整数值,会直接返回缓存中的 `Integer` 对象,从而减少了对象创建次数和内存开销。对于超出这个范围的整数值,虽然仍然会创建新的 `Integer` 对象,但这种方法仍然比直接使用 `new Integer(i)` 更高效,因为它避免了自动装箱和拆箱操作。
总结
`Integer.valueOf()` 是一个高效且常用的方法,用于将基本数据类型 `int` 或表示整数的字符串转换为 `Integer` 对象。它利用了缓存机制来优化性能,特别是在处理 `-128` 到 `127` 之间的整数值时。