深度解析:Integer.parseInt() 源码解读

Integer.parseInt()

深度解析:Integer.parseInt() 源码解读

关键要点

  • 解析字符:用于将字符转换为对应的数字值

Character.digit(s.charAt(i++),radix)

  • 确定limit:根据正负号分别设定

int limit = -Integer.MAX_VALUE;【正】
limit = Integer.MIN_VALUE;【负】

  • 负数运算:在计算结果时使用负数形式,最后根据正负号确定返回结果的符号。

return negative ? result : -result;

  • 结果计算:每次迭代都将之前的结果乘以进制数,然后加上本次解析出来的数字。

result *= radix; result += digit;

源代码

	public static int parseInt(String s, int radix)throws NumberFormatException {/** WARNING: This method may be invoked early during VM initialization* before IntegerCache is initialized. Care must be taken to not use* the valueOf method.*/if (s == null) {throw new NumberFormatException("null");}if (radix < Character.MIN_RADIX) {throw new NumberFormatException("radix " + radix +" less than Character.MIN_RADIX");}if (radix > Character.MAX_RADIX) {throw new NumberFormatException("radix " + radix +" greater than Character.MAX_RADIX");}int result = 0;boolean negative = false;int i = 0, len = s.length();int limit = -Integer.MAX_VALUE;int multmin;int digit;if (len > 0) {char firstChar = s.charAt(0);if (firstChar < '0') { // Possible leading "+" or "-"if (firstChar == '-') {negative = true;limit = Integer.MIN_VALUE;} else if (firstChar != '+')throw NumberFormatException.forInputString(s);if (len == 1) // Cannot have lone "+" or "-"throw NumberFormatException.forInputString(s);i++;}multmin = limit / radix;while (i < len) {// Accumulating negatively avoids surprises near MAX_VALUEdigit = Character.digit(s.charAt(i++),radix);if (digit < 0) {throw NumberFormatException.forInputString(s);}if (result < multmin) {throw NumberFormatException.forInputString(s);}result *= radix;if (result < limit + digit) {throw NumberFormatException.forInputString(s);}result -= digit;}} else {throw NumberFormatException.forInputString(s);}return negative ? result : -result;}

代码解析

  • 字符串解析:从字符串的第一个字符开始逐个解析,识别正负号并将字符转换为对应的数字值。如果字符串为空或不包含数字字符,则抛出异常。
  • 字符转换为数字:通过 ASCII 码值相减的方式将字符转换为数字值,例如字符 ‘5’ 对应的 ASCII 码值减去 ‘0’ 的 ASCII 码值等于 5。
  • 计算结果:根据解析得到的数字值计算最终的整数结果,如果超出了 int 类型的表示范围,则抛出异常。
  • 返回结果:根据正负号确定返回结果的符号,返回解析得到的整数值给调用者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00282】基于Springboot的校园台球厅人员与设备管理系统(有论文)

基于Springboot的校园台球厅人员与设备管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园台球厅人员与设备管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xf…

opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、opengles3.0 绘制图元介绍二、绘图图元 API 介绍1. glDrawArrays()1.1 glDrawArrays()函数原型1.2 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 三者的区别1.3 使用GL_TRIANGLES, G…

【Crypto | CTF】BugKu 简单的RSA

天命&#xff1a;这题也不算简单了&#xff0c;要反编译&#xff0c;要灵活一点 首先收到pyc文件&#xff0c;拿去反编译出来&#xff0c;可以用在线反编译&#xff0c;也可以用工具反编译 在线&#xff1a;python反编译 - 在线工具 工具&#xff1a;https://download.csdn.n…

Flutter SDK 常见问题

镜像配置 第一次运行项目很慢&#xff0c;搜索整个Flutter SDK项目&#xff0c;使用以下内容替换google和mavenCentral仓库。 //修改之前 google() mavenCentral()// 修改之后 maven{ url https://maven.aliyun.com/repository/google } maven{ url https://maven.aliyun.com…

QT文件IO

七、文件IO QFileDialog文件对话框 与QMessageBox一样&#xff0c;QFileDialog也继承了QDialog类&#xff0c;直接使用静态成员函数弹窗&#xff0c;弹窗的结果&#xff08;选择的文件路径&#xff09;通过函数返回值返回。 // 获取一个打开或保存的文件路径 // 参数1&#xff…

Python自定义logger模块(附Demo)

目录 1. 内置logger2. 自定义logger 1. 内置logger Python标准库中的logging模块提供了日志记录的功能 允许开发者通过创建日志记录器、处理程序和格式化器来控制日志的生成和输出 以下是logging模块的一些主要组件和概念&#xff1a; 日志记录器 (Logger)&#xff1a;整个…

修改element-UI组件样式

修改提示文字颜色 也就是 placeholder 的提示信息的颜色&#xff1b;也就是输入框为空白时&#xff0c;其内部的提示文字的样式 ::v-deep .el-input__inner::placeholder {color: white; }表单禁用后项目背景颜色 form表单禁用后背景色仍用白色&#xff0c;字体灰黑色&#…

从Unity到Three.js(outline 模型描边功能)

指定模型高亮功能&#xff0c;附带设置背景颜色&#xff0c;获取随机数方法。 百度查看说是gltf格式的模型可以携带PBR材质信息&#xff0c;如果可以这样&#xff0c;那就完全可以在blender中配置好材质导出了&#xff0c;也就不需要像在unity中调整参数了。 import * as THRE…

Python读写XML文件的技术指南【第100篇—读写XML文件】

Python读写XML文件的技术指南 在软件开发中&#xff0c;XML&#xff08;可扩展标记语言&#xff09;是一种广泛用于数据存储和交换的格式。Python作为一门强大而灵活的编程语言&#xff0c;提供了许多库和工具来处理XML文件。本篇技术博客将介绍如何使用Python读写XML文件&…

Folx Pro Mac中文p破解版如何使用?为您带来Folx Pro 详细使用教程!

​ Folx pro 5 中文版是mac上一款功能强大的老牌加速下载软件&#xff0c;新版本的Folx pro整体界面非常的简洁和漂亮&#xff0c;具有非常好用的分类管理功能&#xff0c;支持高速下载、定时下载、速度控制、iTunes集成等功能。Folx pro兼容主流的浏览器&#xff0c;不但可以下…

ABC342 A-G

HUAWEI Programming Contest 2024&#xff08;AtCoder Beginner Contest 342&#xff09; - AtCoder 被薄纱的一场 A - Yay! 题意&#xff1a; 给出一串仅由两种小写字母构成的字符串&#xff0c;其中一种小写字母仅出现一次&#xff0c;输出那个仅出现一次的小写字母的位置…

2024-02-25 Unity 编辑器开发之编辑器拓展7 —— Inspector 窗口拓展

文章目录 1 SerializedObject 和 SerializedProperty2 自定义显示步骤3 数组、List 自定义显示3.1 基础方式3.2 自定义方式 4 自定义属性自定义显示4.1 基础方式4.2 自定义方式 5 字典自定义显示5.1 SerizlizeField5.2 ISerializationCallbackReceiver5.3 代码示例 1 Serialize…