先来说明一下Integer.parseInt(String s, int radix)的功能。

Integer.parseInt(String s, int radix)就是将整数字符串s(radix用来指明s是几进制)转换成10进制的整数,显然前提是s为整数字符串。比如 s可以为“1314520”、“5201314”等。不可以为“我爱你一生一世”或者“I love you  forever”等之类的非整数字符串。

那么,Integer.pareseInt("10086",10)就是将10进制整数字符串“10086”转换成10进制的整数10086。(有些说法是为了便于表达)

下面我们来了解一下它的具体的内部机制。

 jdk中 java.lang.Integer中的源码如下:

1、

  1. public static int parseInt(String s) throws NumberFormatException
  2. {
  3. );
  4. }

2、

  1. public static int parseInt(String s, int radix)throws NumberFormatException
  2. {
  3. if (s == null) {
  4. throw new NumberFormatException("null");
  5. }
  6. if (radix < Character.MIN_RADIX) {          //Character.MIN_RADIX=2
  7. throw new NumberFormatException("radix " + radix +
  8. " less than Character.MIN_RADIX");
  9. }
  10. if (radix > Character.MAX_RADIX) {          //Character.MAN_RADIX=36
  11. throw new NumberFormatException("radix " + radix +
  12. " greater than Character.MAX_RADIX");
  13. }
  14. ;
  15. boolean negative = false;
  16. , max = s.length();
  17. int limit;
  18. int multmin;
  19. int digit;
  20. ) {
  21. ) == '-') {
  22. negative = true;
  23. limit = Integer.MIN_VALUE;
  24. i++;
  25. } else {
  26. limit = -Integer.MAX_VALUE;
  27. }
  28. multmin = limit / radix;
  29. if (i < max) {
  30. digit = Character.digit(s.charAt(i++),radix);
  31. ) {
  32. throw NumberFormatException.forInputString(s);
  33. } else {
  34. result = -digit;
  35. }
  36. }
  37. while (i < max) {
  38. // Accumulating negatively avoids surprises near MAX_VALUE
  39. digit = Character.digit(s.charAt(i++),radix);
  40. ) {
  41. throw NumberFormatException.forInputString(s);
  42. }
  43. if (result < multmin) {
  44. throw NumberFormatException.forInputString(s);
  45. }
  46. result *= radix;
  47. if (result < limit + digit) {
  48. throw NumberFormatException.forInputString(s);
  49. }
  50. result -= digit;
  51. }
  52. } else {
  53. throw NumberFormatException.forInputString(s);
  54. }
  55. if (negative) {
  56. ) {
  57. return result;
  58. } else {    /* Only got "-" */
  59. throw NumberFormatException.forInputString(s);
  60. }
  61. } else {
  62. return -result;
  63. }
  64. }
我们以Integer.parseInt("110",10)为例。内部的转换过程其实是这样的:
                   
            i=  1*10*10+1*10+0*1; 

若是   Integer.parseInt("111",2)呢?

显然么     i  = 1*2*2+1*2+1*1。为了便于理解,直接这样称呼它们吧: 10进制整数字符串“110”,2进制整数字符串“111”。这时候,还有个问题,就是可以写成Integer.parseInt(“119”, 2)吗?显然是不对滴!2进制数怎么可能出现9呢。如果这样写,系统会抛出java.lang.NumberFormatException异常。

细心的朋友会注意到,在函数内部有这样的约束条件:Character.MAX_RADIX >=  radix >= Character.MIN_RADIX 。                      
根据:Character.MIN_RADIX=2和Character.MAX_RADIX=36 则,parseInt(String s, int radix)参数中  
radix的范围是在2~36之间,超出范围会抛异常。其中s的长度也不能超出7,否则也会抛异常。  

Integer.parseInt(String s, int radix)方法介绍(修正版)的更多相关文章

  1. 关于Integer的parseInt(String s, int radix)方法的使用

    我们平时用到Integer.parseInt("123");其实默认是调用了int i =Integer.parseInt("123",10); 其中10代表的 ...

  2. 源码浅谈(二):java中的 Integer.parseInt(String str)方法

    这个方法是将字符串转换为整型 一.parseInt方法 ,可以看到默认又调用了parseInt(s,10) ,  第二个参数为基数,默认10 ,当然也可以自己设置  public static int ...

  3. Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别

    通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...

  4. java 13-4 Integer和String、int之间的转换,进制转换

    1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B. ...

  5. Integer类toString(int i,int radix)方法

    Integer类toString(int i,int radix)方法: 首先抛出java的api中的介绍: public static String toString(int i, int radi ...

  6. Byte.parseByte(String s,int radix)的解释

    1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下 ...

  7. Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么?

    Integer.valueof(String s)和Integer.parseInt(String s)的具体区别是什么? Integer.valueof(String s)是将一个包装类是将一个实际 ...

  8. Linq中string转int的方法

    Linq中string转int的方法   在做批量删除时,需把一串id值所对应的数据删除,调试出现问题: Linq语句中如果使用ToString()进行类型转换,编译时不会报错,但执行时会出现如下错误 ...

  9. String的split(String regex, int limit)方法小结

    split(String regex, int limit)方法,头一个参数String regex表示字符串分割的模式,包括分隔符和正则表达式:但是第二个参数limit比较迷糊人,api中这样解释: ...

随机推荐

  1. 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷

    原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...

  2. VS2010类模板修改——添加版权、说明

    VS2010类模板修改——添加版权.说明 最近在学习使用Memcache,就想着用C#代码写一个实现Cache与Memcache以及将来若是能融入Redis切换使用的程序集...不过刚开始写代码,强迫 ...

  3. MVC模型部分验证

    ASP.NET MVC模型部分验证 在很多情况下,我们为了代码的复用可能会存在ViewModel共用的情形.比方说,web应用中常常会遇到的一个需求就是用户找回密码的功能.用户首先要验证通过验证邮箱( ...

  4. 开源的.Net ORM微型框架SuperHelper

    SuperHelper——灵活通用的.开源的.Net ORM微型框架 SuperHelper是博主利用业余时间编写的一个ORM微型框架,除了可以提高开发效率,与其它ORM框架相比,博主更加喜欢Supe ...

  5. Spring之SpringMVC(源码)启动初始化过程分析

    1.说明 SpringMVC作为Spring提供的MVC实现,可以实现与Spring的天然无缝联合,因为具有很广泛的用途.具体的关于SpringMVC的处理流程逻辑我在这里就不在赘述了.还是来通过源码 ...

  6. 让apache2不开机启动,管理Ubuntu的开机启动项

    今天在网上发现了一个很好用的管理Ubuntu下开关启动的软件,叫做sysv-rc-conf 使用命令行: tf@ubuntu:/etc/apache2$ sudo update-rc.d -f apa ...

  7. LeetCode之Max Points on a Line Total

    1.问题描述 Given n points on a 2D plane, find the maximum number of points that lie on the same straight ...

  8. 基于MEF的插件框架之总体设计

    基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...

  9. ps入门教程:选择工具、移动工具、索套工具的使用

    本节课程主要内容:1.学习矩形选择工具.椭圆选择工具.移动工具.多边形套索工具.套索工具.磁性套索工具和魔术 棒选择工具.2.用套索和磁性套索,实现对人物照片的抠图.----------------- ...

  10. HBase 手动 flush 机制梳理

    对应 HBase 版本0.94.1,对照了开源的版本和工作使用的某发行版 问题:在 HBase shell 里面输入 flush 'table_or_region_name'之后,发生了什么?具体的实 ...