杰瑞科技汇

java long转object

核心原理:自动装箱

Java 是一种强类型的语言,long 是一个基本数据类型,而 Object 是一个引用数据类型,它们之间不能直接赋值。

java long转object-图1
(图片来源网络,侵删)

为了解决这个问题,Java 为每个基本数据类型都提供了一个对应的包装类

基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

自动装箱 是 Java 5 引入的一个特性,它允许你将一个基本数据类型自动地转换为其对应的包装类对象。

当你尝试将一个 long 值赋给一个 Object 引用时,JVM 会自动调用 Long 类的构造函数或 valueOf 方法,为你创建一个 Long 对象。

// long 是基本类型
long primitiveLong = 12345L;
// Object 是引用类型
Object objectRef;
// 发生了自动装箱
// 编译器会自动将其转换为: objectRef = Long.valueOf(primitiveLong);
objectRef = primitiveLong; 
// objectRef 的类型实际上是 java.lang.Long
System.out.println(objectRef.getClass().getName()); // 输出: java.lang.Long
System.out.println(objectRef); // 输出: 12345

主要方法

虽然自动装箱是最简单的方式,但了解其背后的原理也很重要,主要有两种方式手动完成这个转换。

java long转object-图2
(图片来源网络,侵删)

使用 Long 构造函数 (最传统)

这是最直观的方式,显式地使用 Long 类的构造函数来创建一个 Long 对象。

long primitiveLong = 98765L;
// 手动使用构造函数
Long longObject = new Long(primitiveLong);
// 然后可以将 Long 对象赋给 Object
Object objectRef = longObject;
System.out.println(objectRef.getClass().getName()); // 输出: java.lang.Long
System.out.println(objectRef); // 输出: 98765

注意:从 Java 9 开始,Long(long) 这个构造函数被标记为 @Deprecated(已弃用),官方推荐使用 Long.valueOf(long) 方法,因为它可以利用缓存机制,提高性能并减少内存占用。

使用 Long.valueOf() (推荐)

这是目前推荐的手动转换方式。valueOf() 方法会返回一个 Long 实例,对于在 [-128, 127] 范围内的 long 值,它会返回一个预先缓存好的对象,而不是创建新的实例,这有助于节省内存。

long primitiveLong = 100L;
// 推荐使用 valueOf() 方法
Long longObject = Long.valueOf(primitiveLong);
// 然后可以将 Long 对象赋给 Object
Object objectRef = longObject;
System.out.println(objectRef.getClass().getName()); // 输出: java.lang.Long
System.out.println(objectRef); // 输出: 100

最佳实践与代码示例

在实际开发中,你应该优先使用自动装箱,因为它代码更简洁、可读性更高,只有在需要显式表达意图或进行特定优化时,才考虑手动调用 valueOf

java long转object-图3
(图片来源网络,侵删)

完整示例

public class LongToObjectExample {
    public static void main(String[] args) {
        // 1. 定义一个 long 基本类型变量
        long myLong = 20251027L;
        // 2. 方法一:使用自动装箱(最推荐,最简洁)
        // 这是最常见、最地道的方式
        Object obj1 = myLong;
        System.out.println("自动装箱结果:");
        System.out.println("类型: " + obj1.getClass().getName());
        System.out.println("值: " + obj1);
        System.out.println("--------------------");
        // 3. 方法二:手动使用 Long.valueOf()(推荐的手动方式)
        // 在某些情况下,显式调用可以增强代码可读性
        Object obj2 = Long.valueOf(myLong);
        System.out.println("手动使用 valueOf 结果:");
        System.out.println("类型: " + obj2.getClass().getName());
        System.out.println("值: " + obj2);
        System.out.println("--------------------");
        // 4. 方法三:使用已弃用的构造函数(不推荐,仅作了解)
        // 虽然仍可用,但应避免在新代码中使用
        // Long longObj = new Long(myLong);
        // Object obj3 = longObj;
        // System.out.println("使用构造函数结果:");
        // System.out.println("类型: " + obj3.getClass().getName());
        // System.out.println("值: " + obj3);
    }
}

输出结果:

自动装箱结果:
类型: java.lang.Long
值: 20251027
--------------------
手动使用 valueOf 结果:
类型: java.lang.Long
值: 20251027
--------------------

反向操作:Object 转 long

理解了 longObject,反向操作也同样重要,当你从一个 Object 引用中获取 long 值时,你需要进行拆箱操作。

前提是:这个 Object 必须是一个 Long 类型的实例,否则会抛出 ClassCastException

Object obj = 123L; // 这个 obj 实际上是一个 Long 对象
// 1. 安全的方式:先检查类型
if (obj instanceof Long) {
    // 向下转型,并自动拆箱为 long
    long value = (Long) obj;
    System.out.println("安全转换后的值: " + value);
} else {
    System.out.println("对象不是 Long 类型,无法转换。");
}
// 2. 不安全的方式:直接强制转换
// obj 不是 Long 类型,这里会抛出 ClassCastException
// long value = (Long) obj;
转换方向 方法 代码示例 备注
long -> Object 自动装箱 (首选) Object obj = 123L; 代码简洁,推荐使用。
Long.valueOf() Object obj = Long.valueOf(123L); 手动方式,推荐用于显式表达。
new Long() (已弃用) Object obj = new Long(123L); 传统方式,不推荐在 Java 9+ 中使用。
Object -> long 检查类型后转换 if (obj instanceof Long) { long val = (Long) obj; } 安全的方式,避免 ClassCastException
直接强制转换 long val = (Long) obj; 不安全,如果类型不匹配会抛出异常。

核心要点:

  1. longObject 的本质是装箱,将基本类型变为 Long 对象。
  2. 自动装箱是首选,因为它最简单、最符合现代 Java 编码风格。
  3. Long 类是 long 的包装类,是转换过程中的桥梁。
  4. 反向转换时,务必检查 Object 的实际类型,以避免运行时错误。
分享:
扫描分享到社交APP
上一篇
下一篇