杰瑞科技汇

Java的int转string有哪些方法?

最推荐的方法

方法 代码示例 优点 缺点 推荐场景
String.valueOf() String s = String.valueOf(123); 性能最好,代码清晰,可读性高 无明显缺点 绝大多数情况下的首选
Integer.toString() String s = Integer.toString(123); 性能也很好,是 valueOf 的核心实现 稍微冗长一点点 Integer 类操作相关时
拼接 String s = 123 + ""; 简单、直观 性能最差,会创建不必要的 StringBuilder 对象 简单、临时的场景,不推荐在性能关键代码中使用
String.format() String s = String.format("%d", 123); 功能强大,可轻松格式化数字 语法稍复杂,性能不如前两者 需要对数字进行格式化(如补零、千位分隔符等)时

String.valueOf(int i) - 最推荐

这是最常用、性能最好的方法,它是一个静态方法,可以直接将基本数据类型 int 转换为 String

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

工作原理: String.valueOf(int) 方法内部会调用 Integer.toString(i),但它提供了更统一、更安全的接口,当你不确定传入参数的类型时(可能是 int, long, double, Object 等),使用 String.valueOf() 是最稳妥的选择。

代码示例:

int number = 100;
String str1 = String.valueOf(number);
System.out.println(str1); // 输出: 100
System.out.println(str1.getClass().getName()); // 输出: java.lang.String
// 也可以用于负数
int negativeNumber = -50;
String str2 = String.valueOf(negativeNumber);
System.out.println(str2); // 输出: -50

Integer.toString(int i) - 性能次优

这个方法是 java.lang.Integer 类中的一个静态方法,它的功能与 String.valueOf(int) 几乎完全相同,也是将 int 转换为 String 的标准方式。

工作原理: 它是实际执行转换的核心逻辑,如果你确定你的对象一定是 Integer 类型,并且需要调用其方法,这个方法也很合适。

Java的int转string有哪些方法?-图2
(图片来源网络,侵删)

代码示例:

int number = 200;
String str3 = Integer.toString(number);
System.out.println(str3); // 输出: 200

valueOf vs toString 的选择:

  • String.valueOf(int):更通用,是 String 类的“官方”转换入口,推荐优先使用。
  • Integer.toString(int):同样高效,如果你在处理 Integer 对象,或者代码风格倾向于直接使用包装类的方法,这也是一个很好的选择。

使用空字符串 拼接 - 不推荐(性能差)

这是一种非常直观的写法,通过将 int 与一个空字符串 进行拼接,Java 会自动将 int 转换为 String

工作原理(重要!): 在 Java 5 之前,这种方式会创建一个临时的 StringBuffer 对象来执行拼接,从 Java 5 开始,JVM 对其进行了优化,会使用 StringBuilder,即使如此,它仍然比直接调用 String.valueOf()Integer.toString() ,因为它涉及到创建一个额外的 StringBuilder 实例和调用其 append() 方法。

Java的int转string有哪些方法?-图3
(图片来源网络,侵删)

代码示例:

int number = 300;
String str4 = number + "";
System.out.println(str4); // 输出: 300

为什么不推荐? 虽然代码看起来很短,但在循环或性能敏感的代码中,成千上万次地创建不必要的 StringBuilder 对象会累积成显著的性能开销。


String.format(String format, Object... args) - 用于格式化

这个方法功能非常强大,它不仅可以转换类型,还可以对结果进行格式化,当你需要控制数字的输出格式时(补零、添加千位分隔符、指定小数位数等),这是最佳选择。

工作原理: 它使用类似于 C 语言 printf 的格式化字符串。%dint 类型的格式说明符。

代码示例:

int number = 123;
String str5 = String.format("%d", number);
System.out.println(str5); // 输出: 123
// --- 格式化示例 ---
// 1. 补零,总宽度为5
String str6 = String.format("%05d", number);
System.out.println(str6); // 输出: 00123
// 2. 添加千位分隔符
int largeNumber = 1234567;
String str7 = String.format("%,d", largeNumber);
System.out.println(str7); // 输出: 1,234,567

性能对比

下面是一个简单的 JMH (Java Microbenchmark Harness) 测试,可以直观地看出它们的性能差异。

import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class IntToStringBenchmark {
    private int number = 12345;
    @Benchmark
    public String valueOf() {
        return String.valueOf(number);
    }
    @Benchmark
    public String toString() {
        return Integer.toString(number);
    }
    @Benchmark
    public String stringConcat() {
        return number + "";
    }
    @Benchmark
    public String stringFormat() {
        return String.format("%d", number);
    }
}

典型的性能结果(从快到慢):

  1. String.valueOf(int) - 最快
  2. Integer.toString(int) - 极快,与 valueOf 几乎没有差别
  3. String.format("%d", ...) - 慢很多,因为它需要解析格式化字符串
  4. int + "" - 最慢,尽管有优化,但仍比前两者慢

结论与最佳实践

  • 日常开发、追求性能:请毫不犹豫地选择 String.valueOf(int),它在所有情况下都是最优或接近最优的选择,并且代码清晰易读。
  • 需要格式化数字:请使用 String.format(),它的强大功能远超简单的类型转换。
  • 避免使用:尽量避免使用 int + "" 的方式,尤其是在循环或性能关键路径中,虽然它看起来简单,但它是一种“伪简洁”,背后隐藏着性能成本。
  • 不要使用 Integer.toString(new Integer(i)):这种写法是多余的。Integer.toString(int i) 是静态方法,可以直接接收 int 基本类型,无需先创建 Integer 对象。
分享:
扫描分享到社交APP
上一篇
下一篇