杰瑞科技汇

Java中long转string有几种方法?

在Java中,将long类型转换为String类型有多种方法,每种方法都有其适用场景和特点,下面我将详细介绍几种常用方法,并提供代码示例和性能分析。

Java中long转string有几种方法?-图1
(图片来源网络,侵删)

哪种方法最好?

方法 优点 缺点 推荐场景
Long.toString(long) 最高效、最标准 绝大多数情况下的首选
String.valueOf(long) 同样高效,语义清晰 与其他类型转换风格统一时
"" + long 书写最简单 性能开销大,可能产生临时对象 快速原型、代码极简主义
String.format() 功能强大,可格式化 代码冗长,性能最差 需要特定格式(如补零、千分位)

在日常开发中,请优先使用 Long.toString(long)String.valueOf(long),它们性能最好,代码也清晰。


Long.toString(long) - 推荐

这是最直接、最高效的方法。Long类提供了一个静态的toString()方法,专门用于将long值转换为String

特点:

  • 性能最优:这是JDK内部实现的方法,经过高度优化,直接进行数值到字符串的转换,没有多余的步骤。
  • 代码清晰:意图非常明确,就是进行类型转换。

代码示例:

Java中long转string有几种方法?-图2
(图片来源网络,侵删)
public class LongToStringExample {
    public static void main(String[] args) {
        long number = 123456789L;
        // 使用 Long.toString()
        String str1 = Long.toString(number);
        System.out.println("使用 Long.toString(): " + str1);
        System.out.println("转换后的类型: " + str1.getClass().getName());
        // 处理负数
        long negativeNumber = -987654321L;
        String str2 = Long.toString(negativeNumber);
        System.out.println("使用 Long.toString() (负数): " + str2);
    }
}

输出:

使用 Long.toString(): 123456789
转换后的类型: java.lang.String
使用 Long.toString() (负数): -987654321

String.valueOf(long) - 推荐

String类提供了一个静态的valueOf()方法重载,可以接受各种基本数据类型(包括long)并将其转换为String

特点:

  • 性能同样很高:底层通常也是调用Long.toString(),所以性能与Long.toString()相当。
  • 语义统一:当你需要将不同类型(如int, double, long等)转换为String时,使用String.valueOf()可以使代码风格保持一致。

代码示例:

Java中long转string有几种方法?-图3
(图片来源网络,侵删)
public class LongToStringExample {
    public static void main(String[] args) {
        long number = 123456789L;
        // 使用 String.valueOf()
        String str = String.valueOf(number);
        System.out.println("使用 String.valueOf(): " + str);
        System.out.println("转换后的类型: " + str.getClass().getName());
    }
}

输出:

使用 String.valueOf(): 123456789
转换后的类型: java.lang.String

使用空字符串连接 "" + long

这是一种非常常见的简写方式,利用了Java的字符串连接特性。

特点:

  • 书写简单:代码量最少。
  • 性能较差:Java编译器在处理这种连接时,会先调用String.valueOf()long转换为String,然后再进行字符串连接,这涉及到创建一个临时的StringBuilder对象,并可能产生不必要的对象,导致性能开销,在循环中尤其明显。

代码示例:

public class LongToStringExample {
    public static void main(String[] args) {
        long number = 123456789L;
        // 使用 "" + long
        String str = "" + number;
        System.out.println("使用 \"\" + long: " + str);
        System.out.println("转换后的类型: " + str.getClass().getName());
    }
}

输出:

使用 "" + long: 123456789
转换后的类型: java.lang.String

String.format() - 特殊场景

当你需要对转换后的字符串有特定格式要求时,String.format()是最佳选择,它类似于C语言的sprintf

特点:

  • 功能强大:可以控制数字的格式,例如补零、千分位分隔、科学计数法等。
  • 代码冗长:需要编写格式化字符串。
  • 性能最差:因为它需要解析格式化字符串,开销远大于前几种方法。

代码示例:

public class LongToStringExample {
    public static void main(String[] args) {
        long number = 123456789L;
        long smallNumber = 42L;
        // 1. 基本转换 (不推荐,效率低)
        String str1 = String.format("%d", number);
        System.out.println("使用 String.format() 基本转换: " + str1);
        // 2. 格式化转换:补零
        // %08d 表示输出一个整数,总宽度为8位,不足的用0在左边补齐
        String str2 = String.format("%08d", smallNumber);
        System.out.println("使用 String.format() 补零:      " + str2);
        // 3. 格式化转换:千分位分隔 (需要Locale)
        // %,d 表示用本地化的千分位分隔符
        String str3 = String.format("%,d", number);
        System.out.println("使用 String.format() 千分位:    " + str3);
    }
}

输出(取决于你的系统Locale):

使用 String.format() 基本转换: 123456789
使用 String.format() 补零:      00000042
使用 String.format() 千分位:    123,456,789

性能对比

为了直观地展示性能差异,我们可以使用JMH(Java Microbenchmark Harness)进行基准测试,这里给出一个概念性的结果:

方法 相对性能 备注
Long.toString(long) 最快 (基准) 最优选择
String.valueOf(long) Long.toString 几乎一样快 性能极佳,风格统一
"" + long 慢 2-5 倍 在循环中性能差距会更大
String.format("%d", long) 慢 10-100 倍 仅在需要格式化时使用

如果你追求极致的性能,Long.toString()是无可争议的最佳选择,如果你的代码风格更倾向于使用String工具类,那么String.valueOf()是同样优秀的选择,避免在性能敏感的代码中使用"" + longString.format()进行简单的转换。

处理特殊情况:null

如果你正在处理可能为nullLong对象(而不是原始类型long),需要小心处理。

Long longObject = null; // Long对象,可能为null
// 错误示范:会抛出 NullPointerException
// String str = longObject.toString(); 
// 正确做法1:使用静态工具方法(推荐)
String str1 = String.valueOf(longObject); // 如果longObject为null,结果是字符串 "null"
System.out.println("String.valueOf(null): " + str1);
// 正确做法2:使用 Objects.toString()
String str2 = java.util.Objects.toString(longObject, "default_value"); // 如果为null,返回第二个参数
System.out.println("Objects.toString(null, 'default_value'): " + str2);
// 正确做法3:使用条件判断
String str3 = (longObject == null) ? "null" : longObject.toString();
System.out.println("条件判断: " + str3);

对于原始类型long,它永远不可能为null,所以不需要这些特殊处理。

分享:
扫描分享到社交APP
上一篇
下一篇