杰瑞科技汇

Java中int转string,有几种方法?

最推荐的方法

  • 首选:String.valueOf(int)
    • 优点:代码简洁、可读性高、性能优秀,这是Java官方推荐的、最直接的方式。
  • 次选(性能与首选几乎无差别):Integer.toString(int)
    • 优点:同样是官方方法,性能极佳,非常明确地表达了转换意图。

使用 String.valueOf() (最推荐)

这是最常用和最简洁的方法。String.valueOf() 是一个静态重载方法,可以接受所有基本数据类型(如 int, double, boolean)以及 Object,并将其转换为字符串。

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

代码示例:

int number = 123;
String str1 = String.valueOf(number);
System.out.println(str1);        // 输出: 123
System.out.println(str1.getClass().getName()); // 输出: java.lang.String
// 处理负数
int negativeNumber = -456;
String str2 = String.valueOf(negativeNumber);
System.out.println(str2); // 输出: -456
// 处理0
int zero = 0;
String str3 = String.valueOf(zero);
System.out.println(str3); // 输出: 0

为什么推荐?

  • 简洁:代码一行搞定,非常直观。
  • 安全:如果传入的 intnull(虽然基本类型 int 不可能为 null,但如果是 Integer 对象,String.valueOf(null) 会返回字符串 "null",而 toString() 会抛出 NullPointerException)。
  • 性能:JVM 对此方法有很好的优化,性能非常高。

使用 Integer.toString() (性能优秀)

Integer 类是 int 的包装类,它提供了一个静态方法 toString(),专门用于将 int 转换为 String

代码示例:

Java中int转string,有几种方法?-图2
(图片来源网络,侵删)
int number = 789;
String str = Integer.toString(number);
System.out.println(str);        // 输出: 789
System.out.println(str.getClass().getName()); // 输出: java.lang.String

为什么也很好?

  • 性能:从底层实现来看,String.valueOf(int) 内部就是调用了 Integer.toString(int),所以它们的性能几乎完全一样。
  • 意图明确:代码非常清楚地表明你正在将一个整数转换为字符串。

String.valueOf() 的细微差别: 对于基本类型 int,两者几乎没有区别,但对于 Integer 对象,String.valueOf(obj) 更安全,因为它能正确处理 null


使用空字符串连接 (不推荐,但常见)

这是一种非常“取巧”的方法,通过将 int 与一个空字符串 进行连接,利用Java的自动类型转换机制来得到 String

代码示例:

Java中int转string,有几种方法?-图3
(图片来源网络,侵删)
int number = 101;
String str = "" + number;
System.out.println(str); // 输出: 101

为什么不推荐?

  • 性能稍差:这种操作实际上会创建一个临时的 StringBuilder 对象,执行 append() 操作,最后再调用 toString(),虽然现代JVM对此优化得很好,性能损失微乎其微,但在理论上不如前两种方法直接。
  • 可读性稍差:对于不熟悉这个技巧的人来说,"" + number 的意图不如 String.valueOf(number) 那么清晰。
  • 可能引发 NullPointerExceptionnumber 是一个可能为 nullInteger 对象,"" + number 会导致 NullPointerException,而 String.valueOf(number) 会输出字符串 "null"

使用 String.format() (格式化输出)

如果你不仅需要转换,还需要对格式进行控制(指定宽度、补零等),String.format() 是一个非常强大的工具。

代码示例:

int number = 99;
// 简单转换
String str1 = String.format("%d", number);
System.out.println(str1); // 输出: 99
// 格式化为5位,前面补零
String str2 = String.format("%05d", number);
System.out.println(str2); // 输出: 00099
// 格式化为8位,右对齐,前面补空格
String str3 = String.format("%8d", number);
System.out.println("[" + str3 + "]"); // 输出: [      99]

优点:

  • 功能强大:可以轻松实现复杂的格式化需求。
  • 国际化友好String.format() 遵循 Locale 设置,适合多语言环境。

缺点:

  • “杀鸡用牛刀”:如果只是简单地转换,使用 format() 会显得有些笨重和过度设计。
  • 性能开销:比前几种方法要慢,因为它需要解析格式化字符串。

使用 Integer 的构造函数 (已过时)

在Java 9之前,可以使用 new Integer(int).toString() 的方式。这种方式在Java 9中被标记为过时(deprecated),并且自Java 9起,Integer 的构造函数不再缓存实例,直接使用构造函数来获取字符串是低效的。

代码示例 (不推荐使用):

// 过时的方法,不推荐!
int number = 202;
String str = new Integer(number).toString();
System.out.println(str); // 输出: 202

为什么不推荐?

  • 性能低:创建了一个不必要的 Integer 对象,然后再调用其方法,开销比直接调用静态方法大得多。
  • 已过时:官方文档明确指出不推荐使用。

性能对比与最佳实践

方法 示例 可读性 性能 推荐度
String.valueOf() String.valueOf(i) ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ (首选)
Integer.toString() Integer.toString(i) ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ (次选)
空字符串连接 "" + i ⭐⭐ ⭐⭐⭐⭐ ⭐ (不推荐)
String.format() String.format("%d", i) ⭐⭐⭐ (格式化时) ⭐⭐ ⭐⭐ (仅用于格式化)
new Integer() new Integer(i).toString() ⭐⭐ ⭐ (已过时,禁用)

在Java中将 int 转换为 String

  1. 日常开发:请毫不犹豫地选择 String.valueOf(int),它简洁、安全、高效,是最佳实践。
  2. 追求极致明确:使用 Integer.toString(int),效果与首选方法几乎一样,意图表达更清晰。
  3. 需要格式化:当你需要补零、设置宽度等复杂格式时,再使用 String.format()
  4. 避免使用:尽量避免使用空字符串连接和 Integer 的构造函数。
分享:
扫描分享到社交APP
上一篇
下一篇