Java中String转int的4种方法及秘密技巧

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么这个问题连经验丰富的Java开发者都感到困扰?

如果你曾经搜索过"How do I convert a String to an int in Java?",那么你并不孤单。这是Stack Overflow上最热门的问题之一,拥有数百万的浏览量。看起来很简单?取一个字符串,转换成数字——就完成了。但实际上,Java中String转int隐藏着许多陷阱:从意外的异常到在性能和代码可读性之间做出选择。

在本文中,我们将分析所有流行的Java字符串转数字方法,从速度、安全性和便利性方面进行比较。您将了解如何避免经典的NumberFormatException错误,并获得适用于实际项目的现成解决方案。开始吧!



方法1:经典之作——Integer.parseInt()

最常用且最快的Java中String转int方法是使用静态方法Integer.parseInt()。它接受一个字符串并返回原始类型int。



public class ParseIntExample {    public static void main(String[] args) {        String number = "42";        int result = Integer.parseInt(number);        System.out.println(result); // 输出: 42    }}


Integer.parseInt()的优点:

  • 最佳性能——不创建多余的对象。
  • 简单——一行代码,无需多余的包装。
  • 支持进制——可以指定基数:Integer.parseInt("ff", 16) 返回255。


缺点和陷阱:

  • 如果字符串包含非数字字符(空格、字母),会抛出NumberFormatException。
  • 不处理null——会导致NullPointerException。


// 错误示例:String badInput = "42abc";int value = Integer.parseInt(badInput); // NumberFormatException!


方法2:安全的Integer.valueOf()

第二种流行的Java字符串转数字方法是Integer.valueOf()。它看起来与parseInt()类似,但返回的是Integer对象,而不是原始类型。



public class ValueOfExample {    public static void main(String[] args) {        String number = "123";        Integer result = Integer.valueOf(number);        System.out.println(result); // 输出: 123    }}


何时使用valueOf()?

  • 当您需要Integer对象用于集合时(例如List<Integer>)。
  • 当您使用Optional或Stream API时(见下文)。
  • 由于缓存机制(对于-128到127之间的数字),valueOf()可能比parseInt() + 自动装箱更快。


重要提示:

如果您需要原始类型int,最好使用parseInt()——它快约10-15%,因为它不创建包装对象。但在99%的应用程序中,这种差异可以忽略不计。



方法3:Java 8+ 和 Optional——优雅的错误处理

现代Java中String转int的方法是使用Optional。它允许避免try-catch块,使代码更简洁。



import java.util.Optional;

public class OptionalParseExample { public static Optional<Integer> safeParseInt(String str) { try { return Optional.of(Integer.parseInt(str)); } catch (NumberFormatException e) { return Optional.empty(); } }

public static void main(String[] args) { // 成功解析 safeParseInt("100").ifPresent(System.out::println); // 100

博客

书籍推荐