当前位置: 首页 > news >正文

Java 中 String 转 Integer 的方法与底层原理详解

✨ 一、常见的转换方式

Java 中将 String 转为 Integer(或 int)常用三种方式:

String str = "123";// 方法1:使用 Integer.parseInt()
int num1 = Integer.parseInt(str);// 方法2:使用 Integer.valueOf()
Integer num2 = Integer.valueOf(str);// 方法3:使用 new Integer()(不推荐)
Integer num3 = new Integer(str); // 已过时,不推荐

🔍 二、三种方式的区别

方法返回类型是否装箱是否推荐原理说明
parseIntint❌ 无自动装箱✅ 推荐内部直接解析字符串成 int
valueOfInteger✅ 自动装箱✅ 推荐实际调用了 parseInt() 并进行装箱
new Integer(str)Integer✅ 装箱❌ 不推荐每次 new 一个对象,不走缓存机制,性能差

🧠 三、底层原理解析(重点)

我们重点来看看 Integer.parseInt(String) 的源码和原理:

🔧 源码分析(简化)

public static int parseInt(String s) throws NumberFormatException {if (s == null) {throw new NumberFormatException("null");}int result = 0;boolean negative = false;int i = 0, len = s.length();// 处理负号char firstChar = s.charAt(0);if (firstChar == '-') {negative = true;i++;}while (i < len) {int digit = s.charAt(i++) - '0';  // 将字符 '1' 转为数字 1if (digit < 0 || digit > 9) throw new NumberFormatException();result = result * 10 + digit;}return negative ? -result : result;
}

📌 说明:

  • s.charAt(i) - '0':通过字符 ASCII 值转换成整数(比如 ‘3’ 的 ASCII 是 51,‘0’ 是 48,51-48=3)
  • 字符逐个读取并计算:result = result * 10 + digit
  • 支持负数
  • 抛出异常:如果不是合法数字字符,就抛出 NumberFormatException

图片示例:对 “-1314” 进行 String 转换至 Integer

在这里插入图片描述


💡 四、装箱与缓存机制(valueOf 的核心区别)

Integer.valueOf("123");

这个方法会先执行:

int i = Integer.parseInt("123");

然后执行装箱:

return Integer.valueOf(i);

🧠 Integer 缓存池机制:

Java 对于 [-128, 127] 之间的整数做了缓存,所以多次 valueOf(127) 实际上返回的是同一个对象。

Integer a = Integer.valueOf(127);
Integer b = Integer.valueOf(127);
System.out.println(a == b); // trueInteger c = Integer.valueOf(128);
Integer d = Integer.valueOf(128);
System.out.println(c == d); // false

✅ 面试陷阱点总结

考点解答
parseIntvalueOf 的区别?一个返回 int,一个返回 Integer,后者有装箱过程
哪个方法更推荐?valueOf 推荐用于对象封装,parseInt 更轻量用于原始类型
Integer.valueOf() 有缓存机制吗?✅ 有,范围是 [-128, 127]
为什么 new Integer() 不推荐?每次都会创建新对象,浪费内存,不走缓存池

📘 延伸知识

  • 反过来 Integer → String 怎么转?
    String s = String.valueOf(123);
    String s2 = Integer.toString(123);
    

🧩 Mermaid 图解:String 转 Integer 的常见方式及原理

String str = S\
Integer.parseInt(str)
返回 int 类型
内部逐字符计算
result = result * 10 + digit
Integer.valueOf(str)
先调用 parseInt(str)
然后 Integer.valueOf(int)
触发装箱 & 缓存机制
返回 Integer 对象
new Integer(str)
调用构造函数
不使用缓存,每次都新建对象

📌 图解说明:

  • parseInt() 返回基本类型 int,适合纯粹数值计算。
  • valueOf() 是包装类推荐方式,支持缓存池([-128, 127])。
  • new Integer() 会创建新的对象,已被标记为不推荐(已废弃)。

相关文章:

  • Netty是如何实现零拷贝的?
  • leetcode0102. 二叉树的层序遍历-medium
  • Linux安装ffmpeg7.1操作说明
  • Linux之彻底掌握防火墙-----安全管理详解
  • Python项目--基于计算机视觉的手势识别控制系统
  • 学习笔记(C++篇)--- Day 4
  • vue项目打包后点击dist下面index.html(无法访问您的文件该文件可能已被移至别处、修改或删除。ERR_FILE_NOT_FOUND)比如若依
  • Spark论述及其作用
  • 在Notepad++中使用NppAtyle插件格式化代码
  • AI飞行行为的可解释性与合规审计机制设计
  • 6.3.JVM调优与内存管理
  • 数据通信学习笔记之OSPF的基础术语-距离矢量路由协议
  • Git简介与入门
  • 前端热门面试题day1
  • 建筑安全员 A 证与 C 证:差异决定职业方向
  • 网页设计规范:从布局到交互的全方位指南
  • MySQL 8 自动安装脚本(CentOS-7 系统)
  • 【场景应用13】simple_nlp_example:简单自然语言处理示例
  • 制作一款打飞机游戏19:碰撞检测
  • 网站架构演进之路:从单体到垂直,再到缓存优化
  • 上海体育消费节将从5月持续至11月,推出运动装备商品促销活动
  • 福建海警位金门附近海域依法开展常态化执法巡查
  • 泽连斯基:停火后愿进行“任何形式”谈判,但领土问题除外
  • 新闻1+1丨“龟速”行驶要治理,还要治什么?
  • 告别国泰海通,黄燕铭下一站将加盟东方证券,负责研究业务
  • 在现代东京,便利店如何塑造了饮食潮流、生活方式和日本社会