杰瑞科技汇

Java String转Long有哪些方法?

核心方法概览

方法 所属类 描述 优点 缺点
Long.parseLong(String s) java.lang.Long 最常用,将字符串解析为 long 基本类型。 简单直接,性能最好。 如果字符串格式无效,会抛出 NumberFormatException
Long.valueOf(String s) java.lang.Long 将字符串解析为 Long 对象(包装类型)。 返回 Long 对象,方便在需要对象的地方使用。 性能略低于 parseLong,因为涉及对象创建,同样会抛出异常。
Long.parseLong(String s, int radix) java.lang.Long 将字符串按指定进制解析为 long 功能强大,支持二、八、十、十六进制等转换。 参数稍复杂,同样会抛出异常。

Long.parseLong(String s) - 推荐使用

这是最常用、最直接的方法,专门用于将 String 转换为 long 原始类型。

Java String转Long有哪些方法?-图1
(图片来源网络,侵删)

语法

public static long parseLong(String s) throws NumberFormatException;

示例代码

public class StringToLongExample {
    public static void main(String[] args) {
        String strNumber = "123456789";
        // 1. 成功转换
        try {
            long number = Long.parseLong(strNumber);
            System.out.println("转换成功: " + number);
            System.out.println("类型: " + ((Object)number).getClass().getName()); // 查看类型
        } catch (NumberFormatException e) {
            System.out.println("转换失败: 字符串格式不正确");
        }
        // 2. 字符串包含非数字字符
        String invalidStr = "123abc";
        try {
            long invalidNumber = Long.parseLong(invalidStr);
            System.out.println("这行不会被执行");
        } catch (NumberFormatException e) {
            System.out.println("\n捕获到异常: 字符串 '" + invalidStr + "' 不是有效的数字格式。");
        }
        // 3. 字符串表示的数字超出 long 范围
        String outOfRangeStr = "9223372036854775808"; // Long.MAX_VALUE 是 9223372036854775807
        try {
            long outOfRangeNumber = Long.parseLong(outOfRangeStr);
            System.out.println("这行不会被执行");
        } catch (NumberFormatException e) {
            System.out.println("\n捕获到异常: 字符串 '" + outOfRangeStr + "' 超出 long 类型的范围。");
        }
    }
}

输出

转换成功: 123456789
类型: long
捕获到异常: 字符串 '123abc' 不是有效的数字格式。
捕获到异常: 字符串 '9223372036854775808' 超出 long 类型的范围。

Long.valueOf(String s) - 返回包装类型

这个方法将字符串转换为一个 Long 对象(long 的包装类),当你需要一个 Long 对象而不是 long 基本类型时(在泛型集合 List<Long> 中),这个方法很有用。

语法

public static Long valueOf(String s) throws NumberFormatException;

示例代码

public class StringToLongObjectExample {
    public static void main(String[] args) {
        String strNumber = "987654321";
        try {
            // Long.valueOf() 返回的是一个 Long 对象
            Long longObject = Long.valueOf(strNumber);
            System.out.println("转换成功: " + longObject);
            System.out.println("类型: " + longObject.getClass().getName()); // 查看类型
            // 可以轻松地将其转换为 long 原始类型
            long primitiveLong = longObject; // 自动拆箱
            System.out.println("转换为基本类型 long: " + primitiveLong);
            System.out.println("类型: " + ((Object)primitiveLong).getClass().getName());
        } catch (NumberFormatException e) {
            System.out.println("转换失败: 字符串格式不正确");
        }
    }
}

输出

转换成功: 987654321
类型: java.lang.Long
转换为基本类型 long: 987654321
类型: long

Long.parseLong(String s, int radix) - 进制转换

这是一个非常强大的方法,允许你按照指定的进制(基数)来解析字符串。

语法

public static long parseLong(String s, int radix) throws NumberFormatException;
  • s: 要解析的字符串。
  • radix: 进制,范围必须在 Character.MIN_RADIX (2) 到 Character.MAX_RADIX (36) 之间。

示例代码

public class StringToLongRadixExample {
    public static void main(String[] args) {
        // 十进制 (默认)
        String decimalStr = "255";
        System.out.println("十进制 '" + decimalStr + "' 转换为 long: " + Long.parseLong(decimalStr, 10));
        // 二进制
        String binaryStr = "11111111"; // 255 的二进制表示
        System.out.println("二进制 '" + binaryStr + "' 转换为 long: " + Long.parseLong(binaryStr, 2));
        // 八进制
        String octalStr = "377"; // 255 的八进制表示
        System.out.println("八进制 '" + octalStr + "' 转换为 long: " + Long.parseLong(octalStr, 8));
        // 十六进制
        String hexStr = "FF"; // 255 的十六进制表示
        System.out.println("十六进制 '" + hexStr + "' 转换为 long: " + Long.parseLong(hexStr, 16));
        // 注意:十六进制字符串可以不带 "0x" 前缀
    }
}

输出

十进制 '255' 转换为 long: 255
二进制 '11111111' 转换为 long: 255
八进制 '377' 转换为 long: 255
十六进制 'FF' 转换为 long: 255

异常处理与最佳实践

Long.parseLong()Long.valueOf() 在遇到无效输入时都会抛出 NumberFormatException,这是一个非受检异常(Unchecked Exception),所以你必须处理它,否则程序可能会崩溃。

最佳实践:总是使用 try-catch

public static long convertToLong(String str) {
    // 1. 先检查字符串是否为 null 或空
    if (str == null || str.trim().isEmpty()) {
        // 根据业务需求决定如何处理,可以返回默认值或抛出自定义异常
        throw new IllegalArgumentException("输入字符串不能为 null 或空。");
    }
    try {
        // 2. 尝试转换
        return Long.parseLong(str);
    } catch (NumberFormatException e) {
        // 3. 捕获异常并处理
        // 可以记录日志、返回默认值或抛出更具描述性的异常
        System.err.println("错误: 无法将字符串 '" + str + "' 转换为 long 类型。");
        // 返回一个默认值,0L
        return 0L; 
        // 或者重新抛出一个运行时异常
        // throw new RuntimeException("数字格式转换失败", e);
    }
}
public static void main(String[] args) {
    System.out.println("转换 '123': " + convertToLong("123"));
    System.out.println("转换 'abc': " + convertToLong("abc"));
    System.out.println("转换 'null': " + convertToLong(null)); // 会抛出 IllegalArgumentException
}

总结与如何选择

场景 推荐方法 理由
需要 long 原始类型,字符串格式为标准十进制。 Long.parseLong(String s) 首选,性能最好,代码最简洁。
需要 Long 对象(例如用于泛型、集合或可为 null 的场景)。 Long.valueOf(String s) 直接返回对象,无需额外装箱操作。
字符串是二进制、八进制、十六进制等非十进制格式 Long.parseLong(String s, int radix) 唯一能处理进制转换的方法。
字符串可能包含前缀(如 "0x") Long.decode(String nm) 这个方法很特别,它能自动识别 "0x" (十六进制), "0" (八进制), "#" (十六进制) 前缀。

核心建议:

Java String转Long有哪些方法?-图2
(图片来源网络,侵删)
  • 99% 的情况下,使用 Long.parseLong(String s)
  • 如果需要处理进制,使用 Long.parseLong(String s, int radix)
  • 如果输入可能无效,务必用 try-catch 包裹转换逻辑
  • 如果字符串可能是 null 或空,务必先进行检查
Java String转Long有哪些方法?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇