首页 > 解决方案 > Integer.parseInt 是在 Java 中将 String 转换为 Int 的最佳方法?

问题描述

我们通常使用 Integer.parseInt 方法StringInteger转换 in JAVA,但是当我检查 parseInt 方法的实现时,它比我最初认为的要深入得多。下面我将分享 parseInt 的深度:

Integer.parseInt(String s) ->  Integer.parseInt(String s, int radix) ->  Character.digit(char ch, int radix) -> Character.digit(int codePoint, int radix) -> (Based on instance call will go to digit(int ch, int radix))

注意:CharacterData 共有 7 个不同的 Instance 定义,其中一个会为 digit 达到峰值。

根据上面的细节,ParseInt 看起来并不像最初看起来那么容易,那么将 String 转换为 Integer 不是最好的吗?

但是,我关注了一个讨论(我暂时丢失了链接),发现下面的方法在性能方面非常快。

 static int getNumber(String number){

     int result = 0;
     int startIndex = 0;


     for(int i=startIndex;i<number.length();i++){
         result = result*10+number.charAt(i)-'0';
     }



    return result;
}

以下是我为这两种方法找到的性能测试结果。

 Value :123456789 , Integer->parseInt Converted in 22000 nanosec.
 Value :123456789 , getNumber Converted in 5000 nanosec.

那么将 String 转换为 Integer、Integer.parseInt 或 getNumber 方法的最佳方法是什么?

标签: java

解决方案


我邀请您查看 parseInt 函数的源代码。你的幼稚函数更快,但它的作用也更少。边缘情况,例如数字太大而无法放入一个int数字或根本不是一个数字,将使用您的简单函数产生无法检测到的虚假结果。

最好相信语言设计者已经完成了他们的工作,并且已经产生了一个相当快速的解析整数的实现。真正的优化可能在别处。


推荐阅读