在Java中,Integer.parseInt是将字符串转换为Int的最佳方法吗?

在Java中,Integer.parseInt是将字符串转换为Int的最佳方法吗?,java,Java,在JAVA中,我们通常使用Integer.parseInt方法进行字符串到整数的转换,但当我检查parseInt方法的实现时,我认为它比我最初想象的要深入。下面我将分享parseInt的深度: Integer.parseInt(String s) -> Integer.parseInt(String s, int radix) -> Character.digit(char ch, int radix) -> Character.digit(int codePoint, i

在JAVA中,我们通常使用Integer.parseInt方法进行字符串到整数的转换,但当我检查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个不同的实例定义,其中一个实例的峰值为数字

根据上面的细节,ParseInt看起来并不像最初看起来那个么简单,所以将字符串转换为整数不是最好的方法吗

然而,我遵循了一个我当时丢失的讨论链接,发现下面的方法在性能方面非常快

 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;
}
那么,将字符串转换为整数、Integer.parseInt或getNumber方法的最佳方法是什么呢?

是一种方法。警察说

使用parseIntString将字符串转换为int原语,或使用valueOfString将字符串转换为整数对象

parseInt可能涵盖了许多您自己的代码没有考虑的边缘情况。很多用户已经在生产中对它进行了很好的测试。

我邀请您。你的天真功能更快,但它也做得更少。边缘情况,例如数字太大,无法与int匹配,或者根本不是数字,将使用简单函数产生无法检测到的虚假结果


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

提示:你的方法对字符串做什么这不是一个数字,你认为它应该做什么?如果我通过1234567855488845454122125584545,你的getNumber方法会有什么反应?或者如果我通过aa?Simmant这真的重要吗?代码中有比将字符串解析为int慢得多的部分。您正在微优化与程序速度无关的内容。作为一名初学者,您应该专注于正确性而不是速度。@Simmant:所以您已经编写了自己的代码,它将默默地给出无效的结果,而不是在出错时抛出异常。。。您需要维护更多的代码,而且更容易出错。有时这可能是合适的——但只有当您证明整数解析实际上是应用程序中的瓶颈时。你已经证明了吗?@Simmant仅仅因为你看到了1000个呼叫,并不能让它成为性能热点。您需要使用探查器来查看哪些部分可以改进,而不是猜测。如果你有1000个需要22000纳秒的电话,那么与10个需要10秒的电话相比,这算不了什么。重要的是整体表现。
 Value :123456789 , Integer->parseInt Converted in 22000 nanosec.
 Value :123456789 , getNumber Converted in 5000 nanosec.