这个方法是将字符串转换为整型

一、parseInt方法 ,可以看到默认又调用了parseInt(s,10) ,  第二个参数为基数,默认10 ,当然也可以自己设置 

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

二、parseInt(String s, int radix)

  1. public static int parseInt(String s, int radix)
  2. throws NumberFormatException
  3. {
  4. /*
  5. * WARNING: This method may be invoked early during VM initialization
  6. * before IntegerCache is initialized. Care must be taken to not use
  7. * the valueOf method.
  8. */
  9.      // 第一步、判断字符串参数是否为null
  10. if (s == null) {
  11. throw new NumberFormatException("null");
  12. }
  13.      
         // 第二步,判断基数是否小于最小基数 为2
  14. if (radix < Character.MIN_RADIX) {
  15. throw new NumberFormatException("radix " + radix +
  16. " less than Character.MIN_RADIX");
  17. }

  18.      // 第三步,判断基数是否大于最大基数 为36
  19. if (radix > Character.MAX_RADIX) {
  20. throw new NumberFormatException("radix " + radix +
  21. " greater than Character.MAX_RADIX");
  22. }
  23.  
  24. int result = ;
  25.  
  26.      // 标识,是否为负数,默认false
  27. boolean negative = false;
    // 字符串转换为char数组后的 下标和数组长度
  28. int i = , len = s.length();
  29. int limit = -Integer.MAX_VALUE;
  30. int multmin;
  31. int digit;

  32. // 第四步,判断字符串长度是不大于0
  33. if (len > ) {
            // 取第一个字符
  34. char firstChar = s.charAt();
           // 字符ASCII是否小于'0' ,可能为 '+' '-' , 如果不是<'0' ,则为数组 ,略过该if{}
  35. if (firstChar < '') { // Possible leading "+" or "-"
  36. // 如果第一个字符是'-' ,说明是负数,则负数标识改为true ,限制改为最小标识
              if (firstChar == '-') {
  37. negative = true;
  38. limit = Integer.MIN_VALUE;
  39. } else if (firstChar != '+')
                // 如果第一个字符不是'-' 也不是'+' ,异常
  40. throw NumberFormatException.forInputString(s);
  41.           // 第一字符<'0' 且长度为1 则不是数字 异常
  42. if (len == ) // Cannot have lone "+" or "-"
  43. throw NumberFormatException.forInputString(s);
  44. i++;
  45. }
  46. multmin = limit / radix;
           // 遍历字符串转为的字符数组,将每一个字符转为10进制值,并拼接
  47. while (i < len) {
  48. // Accumulating negatively avoids surprises near MAX_VALUE
  49. digit = Character.digit(s.charAt(i++),radix);
  50. if (digit < ) {
  51. throw NumberFormatException.forInputString(s);
  52. }
  53. if (result < multmin) {
  54. throw NumberFormatException.forInputString(s);
  55. }
  56. result *= radix;
  57. if (result < limit + digit) {
  58. throw NumberFormatException.forInputString(s);
  59. }
  60. result -= digit;
  61. }
  62. } else {
  63. throw NumberFormatException.forInputString(s);
  64. }
         // 返回拼接数据
  65. return negative ? result : -result;
  66. }

综上,该方法源码的执行流程:

  

  1. 1parseInt(String s)--内部调用parseInt(s,)(默认为10进制)
  2. 2、判断字符串参数是否不为null,否则异常
    3、判断基数是否在最小基数和最大基数之间,否则异常
    4、判断字符串长度是否>0
  3. 5、判断第一个字符是否是符号位,是的话判断+-符号,不是的话则第一位不是字符,直接下一步遍历每一个字符
  4. 6、循环遍历确定每个字符的十进制值
  5. 7、通过*= 和-= 进行计算拼接
  6. 8、判断是否为负值 返回结果

源码浅谈(二):java中的 Integer.parseInt(String str)方法的更多相关文章

  1. OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa

    元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...

  2. 源码浅谈(一):java中的 toString()方法

    前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> ...

  3. 结合源码浅谈Spring容器与其子容器Spring MVC 冲突问题

    容器是整个Spring 框架的核心思想,用来管理Bean的整个生命周期. 一个项目中引入Spring和SpringMVC这两个框架,Spring是父容器,SpringMVC是其子容器,子容器可以看见父 ...

  4. 【Android测试】【第七节】Monkey——源码浅谈

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4713466.html 前言 根据上一篇我们学会了Monke ...

  5. 【Android测试】【第三节】ADB——源码浅谈

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4651724.html 前言 由于本人精力 ...

  6. 浅谈对java中传参问题的理解

    之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...

  7. 浅谈对java中锁的理解

    在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关键字被常用于维护数据一致性.synchronized机制是给共享 ...

  8. 浅谈在java中list集合的排序问题

    定义实体类: public class Person { private Integer id; private String name; private Integer age; public In ...

  9. 从源码和doc揭秘——Java中的Char究竟几个字节,Java与Unicode的关系

    #编码与字符编码 (懂编码的建议直接跳过) 在计算机世界中,任何事物都是用二进制图片数字表示的,图片可以编码为JPG,PNG格式的字节流,音频,视频有MP3,MP4格式的字节流.这些JPG,MP3等都 ...

随机推荐

  1. 关于Node.js中的路径问题

    在前端学习过程中,涉及到路径的问题非常多,相对路径,绝对路径等.有时候明明觉得没问题,但是还是会出错.或者说线下没问题,但是到了线上就出现问题,因此弄懂路径问题,非常关键.我们需要知道为什么这个地方既 ...

  2. Java 在PDF文档中绘制图形

    本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...

  3. MAC中使用APICloud同步代码错误解决办法

    在MAC上使用APICloud同步代码时出现错误,其实就是git位置的问题,简单点就是把路径映射下. 问题提示: Can't locate SVN/Core.pm in @INC (you may n ...

  4. RMAN优缺点及RMAN备份及恢复步骤

    RMAN优缺点及RMAN备份及恢复步骤--以下部分来自网络转摘,仅供参考和OS命令备份方式相比,使用RMAN的优点1 备份执行期间不需要人工干预,因此减少了误操作的机会:2 可以有效的将备份和恢复结合 ...

  5. JDBC:SqlServer连接TCP/IP连接失败,到主机 的 TCP/IP 连接失败。报错信息:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。

    作者QQ:1161493927,欢迎互相交流学习. 报错信息:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败. j ...

  6. SQL Server存储过程邮件发送以表格方式发送

    一.收到邮件显示:示例 二.存储过程代码部分: BEGIN SET NOCOUNT ON; --初始化 Declare @MailTo nvarchar(max) Declare @MailCc nv ...

  7. hdfs一直处于safemode模式

    目前来看,导致hdfs一直处于safemode模式最直接的原因是已成功复制的块的比例没有达到默认值,块的损坏也会造成一直处于安全模式. 1)文件系统中有损坏的文件,使用fsck命令来查看 hadoop ...

  8. 如何创建应用程序包(C ++)

    备注 如果您要创建UWP应用程序包,请参阅使用MakeAppx.exe工具创建应用程序包. 了解如何使用打包API为Windows应用商店应用创建应用包. 如果要手动创建桌面应用程序包,还可以使用使用 ...

  9. #Java学习之路——基础阶段二(第六篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  10. c语言-自己写的库

    一.俗话说算法是程序的灵魂,这下面本人写了一部分常用算法,欢迎大家使用,并提出批评和指正,当然也可以改进或者添加. 1.这是自己实现的算法库头文件 #ifndef _INC_ALGORITHM #de ...