有几种方法可以实现这个转换,其中最常用和最推荐的是使用包装类。

使用包装类(最常用、最推荐)
Java 为每个基本类型都提供了一个对应的包装类,int 对应的包装类是 java.lang.Integer。
Integer 类是 Object 的子类,所以一个 Integer 对象可以非常自然地被当作 Object 使用。
直接构造 Integer 对象
这是最直接的方式,你可以使用 Integer 的构造函数来创建一个对象。
int primitiveInt = 123;
// 使用 Integer 构造函数创建一个 Integer 对象
Integer integerObject = new Integer(primitiveInt);
// integerObject 是一个 Object,因为 Integer 是 Object 的子类
Object object = integerObject;
System.out.println("原始 int 值: " + primitiveInt);
System.out.println("Integer 对象: " + integerObject);
System.out.println("作为 Object 的值: " + object);
System.out.println("Object 的类型: " + object.getClass().getName()); // 输出 java.lang.Integer
注意:从 Java 9 开始,这种方式(new Integer(...)) 被标记为过时,因为它不如 Integer.valueOf() 高效。

使用 Integer.valueOf()(推荐方式)
Integer.valueOf() 是更推荐的方法,它会返回一个 Integer 对象,并且有一个缓存机制,对于在 -128 到 127 范围内的整数,它会直接返回缓存中的对象,而不是创建新的,这有助于节省内存和提高性能。
int primitiveInt = 100;
// 使用 Integer.valueOf() 创建 Integer 对象
Integer integerObject = Integer.valueOf(primitiveInt);
// 这个对象可以无缝地赋值给 Object 类型的变量
Object object = integerObject;
System.out.println("原始 int 值: " + primitiveInt);
System.out.println("Integer 对象: " + integerObject);
System.out.println("作为 Object 的值: " + object);
自动装箱
Java 5 引入了“自动装箱”特性,这意味着你可以直接将一个 int 值赋给一个 Integer 变量,编译器会自动为你调用 Integer.valueOf() 方法,这是最简洁、最常用的写法。
int primitiveInt = 200;
// 编译器会自动将这行代码转换为: Integer integerObject = Integer.valueOf(primitiveInt);
Integer integerObject = primitiveInt; // 自动装箱
Object object = integerObject; // Integer 对象可以赋值给 Object
System.out.println("原始 int 值: " + primitiveInt);
System.out.println("Integer 对象: " + integerObject);
System.out.println("作为 Object 的值: " + object);
转换为 Object 数组
如果你需要将 int 数组 (int[]) 转换为 Object 数组 (Object[]),情况会有些不同。
int[] 本身是一个对象,所以你可以直接将它赋值给 Object 变量。

int[] primitiveIntArray = {1, 2, 3, 4, 5};
// int[] 是一个对象,所以可以直接赋值给 Object
Object objectArray = primitiveIntArray;
System.out.println("Object 的类型: " + objectArray.getClass().getName()); // 输出 [I
System.out.println("数组的第一个元素: " + ((int[]) objectArray)[0]); // 需要强制转换回 int[] 才能访问元素
// 你不能直接将 int[] 赋值给 Object[]
// Object[] objectArray2 = primitiveIntArray; // 编译错误!Incompatible types.
如果你想把 int 数组中的每个元素都转换成 Integer 对象,并存入一个 Object[] 数组中,你需要手动进行转换:
int[] primitiveIntArray = {1, 2, 3, 4, 5};
// 创建一个 Object 数组,其长度与 int 数组相同
Object[] objectArray = new Object[primitiveIntArray.length];
// 遍历 int 数组,将每个元素通过自动装箱转换为 Integer,并存入 Object 数组
for (int i = 0; i < primitiveIntArray.length; i++) {
objectArray[i] = primitiveIntArray[i]; // 这里发生了自动装箱
}
System.out.println("Object 数组的第一个元素: " + objectArray[0]);
System.out.println("Object 数组的第一个元素类型: " + objectArray[0].getClass().getName()); // 输出 java.lang.Integer
| 转换目标 | 方法 | 代码示例 | 说明 |
|---|---|---|---|
将 int 转为 Object |
使用 Integer 包装类 |
Object obj = Integer.valueOf(10); |
最常用、最推荐的方式,利用了自动装箱和 valueOf 的性能优势。 |
| (旧式) 构造函数 | Object obj = new Integer(10); |
可用,但从 Java 9 开始已过时。 | |
将 int[] 转为 Object |
直接赋值 | Object obj = new int[]{1, 2, 3}; |
int[] 本身就是对象,可以直接赋值,但访问元素时需要强制转换。 |
将 int[] 转为 Object[] |
手动转换元素 | Object[] objArray = Arrays.stream(arr).boxed().toArray(); |
需要将每个 int 元素单独转换为 Integer。 |
核心要点:
- 基本类型 vs 引用类型:
int是基本类型,Object是引用类型,不能直接转换。 - 包装类是桥梁:
Integer是连接int和Object的桥梁。 valueOf()>new Integer():在现代 Java 中,始终优先使用Integer.valueOf(),因为它性能更好。- 自动装箱:
int a = 10; Integer b = a;这种写法是合法且推荐的,编译器会帮你处理好一切。
