杰瑞科技汇

java int转换为string

TL;DR)

方法 代码示例 优点 缺点 推荐度
String.valueOf() String str = String.valueOf(123); 性能最好,代码清晰,null 安全 无明显缺点 ⭐⭐⭐⭐⭐ (最推荐)
Integer.toString() String str = Integer.toString(123); 性能也很好,代码清晰 对于基本类型 intvalueOf 是原生方法,可能更快一点点 ⭐⭐⭐⭐⭐ (强烈推荐)
字符串拼接 String str = "" + 123; 简单直观 性能最差,会创建不必要的 StringBuilder 对象 ⭐⭐
String.format() String str = String.format("%d", 123); 功能强大,适合格式化输出 有点“杀鸡用牛刀”,性能不如前两者 ⭐⭐⭐
new Integer().toString() String str = new Integer(123).toString(); 早期 Java 常用 会创建不必要的 Integer 对象,不推荐

String.valueOf(int i) - 最推荐

这是最常用、性能也最好的方法。String 类提供了一个重载的 valueOf 方法,专门用于将基本数据类型(如 int, double, boolean 等)转换为字符串。

java int转换为string-图1
(图片来源网络,侵删)

代码示例:

int number = 100;
String str1 = String.valueOf(number);
System.out.println(str1);      // 输出: 100
System.out.println(str1.getClass().getName()); // 输出: java.lang.String

优点:

  • 性能高valueOf(int) 是一个本地方法(native method),由 JVM 直接优化,执行效率非常高。
  • 代码清晰:意图明确,一眼就能看出是要将一个值转换为字符串。
  • null 安全:如果传入的是一个包装类型 Integernull 值,String.valueOf(null) 会输出字符串 "null",而不会抛出 NullPointerException,虽然对于基本类型 int null 不适用,但这个方法的一致性很好。

Integer.toString(int i) - 强烈推荐

这是另一种非常高效和推荐的方法。Integer 类是 int 的包装类,它提供了静态的 toString() 方法来完成转换。

代码示例:

java int转换为string-图2
(图片来源网络,侵删)
int number = 200;
String str2 = Integer.toString(number);
System.out.println(str2);      // 输出: 200
System.out.println(str2.getClass().getName()); // 输出: java.lang.String

优点:

  • 性能高:与 String.valueOf() 性能几乎一样好,也是非常高效的选择。
  • 代码清晰:同样表达了明确的转换意图。

String.valueOf() 的细微差别:

  • String.valueOf(int i) 内部就是调用了 Integer.toString(i),所以从功能上看,它们几乎完全等价。
  • 在一些极端性能测试中,String.valueOf() 可能会因为有 JVM 优化而略微快一点点,但这种差异在实际应用中完全可以忽略不计。
  • 选择建议:两者都是顶级选择,可以任选一个,遵循项目或团队的编码风格即可。

使用 字符串拼接 - 简单但低效

这是最直观、最“傻瓜式”的方法,通过将一个空字符串 与 int 变量相连接,利用 Java 的自动类型转换机制来完成。

代码示例:

java int转换为string-图3
(图片来源网络,侵删)
int number = 300;
String str3 = "" + number;
System.out.println(str3); // 输出: 300

原理: 当 运算符的一边是字符串,另一边是基本类型时,JVM 会自动将基本类型通过 String.valueOf() 转换为字符串,然后再进行拼接。

缺点:

  • 性能差:在编译后,"" + number 实际上会被编译器优化为 new StringBuilder().append("").append(number).toString(),如果是在循环中进行拼接,会反复创建 StringBuilder 对象,导致性能急剧下降。
  • 可读性稍差:虽然简单,但在复杂的表达式中, 运算符的意图不如 String.valueOf()Integer.toString() 那么清晰。

适用场景:仅在需要快速转换单个变量,且对性能要求不高的简单脚本或调试代码中使用。


String.format() - 功能强大,用于格式化

String.format() 方法功能非常强大,它使用格式化字符串来生成新的字符串,虽然可以用来做类型转换,但它主要用于更复杂的格式化需求。

代码示例:

int number = 123;
String str4 = String.format("%d", number);
System.out.println(str4); // 输出: 123

优点:

  • 功能强大:不仅可以转换,还可以指定格式,例如补零、千位分隔符等。
    int num = 99;
    // 补零,总宽度为5
    String formattedStr = String.format("%05d", num); 
    System.out.println(formattedStr); // 输出: 00099

缺点:

  • 性能开销String.format() 比前几种方法要慢,因为它需要解析格式化字符串,并创建 Formatter 对象。
  • “杀鸡用牛刀”:如果仅仅是做简单的类型转换,使用 format 显得有些小题大做。

适用场景:当你需要对输出结果进行特定格式化时,这才是它的用武之地。


new Integer(i).toString() - 过时且不推荐

在早期版本的 Java 中,这是一种常见的方法,它首先创建一个 Integer 对象,然后调用该对象的 toString() 方法。

代码示例:

int number = 400;
// 不推荐!
String str5 = new Integer(number).toString(); 
System.out.println(str5); // 输出: 400

缺点:

  • 性能差:它会创建一个不必要的 Integer 对象,这个过程涉及到内存分配和垃圾回收,会带来性能开销,对于基本类型 int,这完全是多余的。
  • 代码冗余:有更简单、更高效的方法。

适用场景:几乎不适用,这种写法在现代 Java 编程中已经过时,应避免使用。


性能对比(简单示例)

为了直观感受性能差异,这里有一个简单的 JMH (Java Microbenchmark Harness) 测试思路(非精确测试,仅作示意):

// 假设在一个循环中执行百万次
long start = System.nanoTime();
for (int i = 0; i < 1_000_000; i++) {
    String.valueOf(i); // 或其他方法
}
long end = System.nanoTime();
System.out.println("String.valueOf(): " + (end - start) + " ns");

预期结果(大致排序,从快到慢):

  1. String.valueOf(int)
  2. Integer.toString(int)
  3. String.format("%d", int)
  4. "" + int (在循环中表现极差)
  5. new Integer(int).toString()

结论与最佳实践

场景 推荐方法
通用、高性能转换 String.valueOf(int)Integer.toString(int) (二选一即可)
在循环中进行拼接 始终使用 StringBuilderStringBuffer
需要特定格式(如补零) String.format()
快速调试或简单脚本 "" + int (可以接受,但不推荐在生产代码中使用)
避免 new Integer(int).toString()

在你的日常 Java 开发中,请优先选择 String.valueOf()Integer.toString() 来将 int 转换为 String,它们是最高效、最专业、最被社区认可的做法。

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