杰瑞科技汇

Java int转Object有几种方式?

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

Java int转Object有几种方式?-图1
(图片来源网络,侵删)

使用包装类(最常用、最推荐)

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() 高效。

Java int转Object有几种方式?-图2
(图片来源网络,侵删)

使用 Integer.valueOf()(推荐方式)

Integer.valueOf() 是更推荐的方法,它会返回一个 Integer 对象,并且有一个缓存机制,对于在 -128127 范围内的整数,它会直接返回缓存中的对象,而不是创建新的,这有助于节省内存和提高性能。

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 变量。

Java int转Object有几种方式?-图3
(图片来源网络,侵删)
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

核心要点:

  1. 基本类型 vs 引用类型int 是基本类型,Object 是引用类型,不能直接转换。
  2. 包装类是桥梁Integer 是连接 intObject 的桥梁。
  3. valueOf() > new Integer():在现代 Java 中,始终优先使用 Integer.valueOf(),因为它性能更好。
  4. 自动装箱int a = 10; Integer b = a; 这种写法是合法且推荐的,编译器会帮你处理好一切。
分享:
扫描分享到社交APP
上一篇
下一篇