JavaSE基础-Java字符串转整数与拼接实战指南

JavaSE基础-Java字符串转整数与拼接实战指南

目录

Java 核心知识点:字符串转整数与字符串相加

一、 字符串转整形数字

1.1 精简版(快速上手)

1.2 详细版(机制与陷阱)

1.3 关键陷阱总结表

二、 字符串相加

2.1 精简版(性能核心)

2.2 详细版(编译器优化与陷阱)

2.3 性能选择决策树

💡 一句话总结


本文总结Java中字符串转整数和字符串相加的核心知识点:1. 字符串转整数:推荐使用Integer.parseInt()方法,需注意处理NumberFormatException异常,对带空格的字符串要先trim(),大数值可使用Long.parseLong()或BigInteger。2. 字符串相加:编译期常量可使用+运算符(会被优化),但循环中必须使用StringBuilder以避免性能问题(性能差距可达200倍),多线程场景用StringBuffer,分隔符连接推荐String.join()。3. 关键陷阱:包括字符串转数字时的空值处理、进制转换问题,以及字符串拼接的性能优化策略。


Java 核心知识点:字符串转整数与字符串相加

一、 字符串转整形数字

1.1 精简版(快速上手)

Java

// 方式1:最常用(返回基本类型 int) String str = "123"; int num = Integer.parseInt(str); // 123 // 方式2:返回包装类(有缓存优化) Integer numObj = Integer.valueOf(str); // Integer 对象 // 异常处理(必加!) try { int badNum = Integer.parseInt("abc"); // 抛出 NumberFormatException } catch (NumberFormatException e) { System.out.println("不是有效数字"); } // 进制转换(如十六进制) int hex = Integer.parseInt("FF", 16); // 255 

1.2 详细版(机制与陷阱)

Java

public class StringToIntDemo { public static void main(String[] args) { // ========== 1. 核心方法对比 ========== // 【parseInt】返回基本类型 int,适合计算 // 内部逻辑:逐个字符解析,遇到非数字立即抛异常 int a = Integer.parseInt("100"); // 十进制 100 int b = Integer.parseInt("100", 8); // 八进制 100 = 64(十进制) int c = Integer.parseInt("100", 16); // 十六进制 100 = 256(十进制) // 【valueOf】返回 Integer 包装类,有缓存优化(-128~127) // 内部实际调用 parseInt,但会走缓存池 Integer obj1 = Integer.valueOf("100"); Integer obj2 = Integer.valueOf("100"); System.out.println(obj1 == obj2); // true(缓存命中,同一对象) // 【decode】支持 0x/0X/0/# 前缀自动识别进制 int d = Integer.decode("0xFF"); // 255(自动识别十六进制) int e = Integer.decode("#FF"); // 255(#也是十六进制标记) int f = Integer.decode("010"); // 8(0开头识别为八进制) // ========== 2. 异常处理(生产环境必看) ========== String risky = " 123 "; // 带空格 try { // 【陷阱1】前后空格会导致解析失败 int fail = Integer.parseInt(risky); // NumberFormatException // 【正确做法】先 trim int success = Integer.parseInt(risky.trim()); // 123 // 【陷阱2】空字符串和 null // Integer.parseInt(""); // NumberFormatException(空串) // Integer.parseInt(null); // NullPointerException(注意:不是 NumberFormatException!) } catch (NumberFormatException ex) { // 【最佳实践】记录日志并给出默认值或终止流程 System.err.println("非法数字格式:" + ex.getMessage()); int defaultVal = 0; } // ========== 3. 大数与边界 ========== // 【陷阱3】超出 int 范围(-2147483648 ~ 2147483647) // Integer.parseInt("2147483648"); // NumberFormatException(超出上限) // 【解决方案】用 Long long big = Long.parseLong("2147483648"); // 【解决方案】更大用 BigInteger(任意精度) java.math.BigInteger huge = new java.math.BigInteger("99999999999999999999"); } } 

1.3 关键陷阱总结表

输入字符串结果原因
"123"✅ 123标准十进制
" 123 "❌ 异常含空格,必须先 trim()
""❌ 异常空字符串无法解析
nullNPE非 NumberFormatException,需提前判空
"0xFF"❌ 异常parseInt 不认识前缀,用 decode 或指定 radix=16
"123.45"❌ 异常含小数点,应先用 Double.parseDouble 再转 int

二、 字符串相加

2.1 精简版(性能核心)

Java

// 方式1:+ 运算符(编译期常量优化) String s = "Hello" + " " + "World"; // 编译后直接为 "Hello World" // 方式2:循环中禁用 +(会产生大量临时对象) String; for (int i = 0; i < 100; i++) { result += i; // 每次循环都创建新的 StringBuilder 和 String 对象,极慢! } // 方式3:StringBuilder(单线程推荐) StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100; i++) { sb.append(i); } String result = sb.toString(); // 方式4:String.join(Java 8+,连接多个字符串) String joined = String.join("-", "2024", "02", "23"); // "2024-02-23" 

2.2 详细版(编译器优化与陷阱)

Java

public class StringConcatDemo { public static void main(String[] args) { // ========== 1. 编译期优化(常量折叠) ========== // 【常量折叠】编译器在编译阶段直接计算出结果 String a = "Hello" + " " + "World"; // 编译后:String a = "Hello World"; // 【陷阱】变量参与时无法优化 String b = "Hello"; String c = b + " World"; // 编译后实际是:new StringBuilder().append(b).append(" World").toString() // ========== 2. 运行时拼接的本质(StringBuilder) ========== // 反编译后等价代码: // String temp = new StringBuilder().append(b).append(" World").toString(); // ========== 3. 循环中的致命陷阱 ========== // 【低效代码】O(n²) 复杂度,创建 n 个 StringBuilder 和 n 个 String 对象 String; for (int i = 0; i < 1000; i++) { bad += i; // 每次循环:new StringBuilder -> append -> toString } // 【高效代码】O(n) 复杂度,只创建一个 StringBuilder StringBuilder good = new StringBuilder(1000); // 预估容量,避免扩容 for (int i = 0; i < 1000; i++) { good.append(i); } String result = good.toString(); // 【性能对比】10000次拼接: // String+ 耗时:约 200-500ms // StringBuilder 耗时:约 1-2ms (差距200倍以上!) // ========== 4. 其他拼接方式 ========== // 【concat】String 自带方法,内部使用数组复制,比 + 快但不如 StringBuilder String s1 = "Hello".concat(" ").concat("World"); // 【join】Java 8 新增,适合用分隔符合并多个字符串 String[] parts = {"Java", "Python", "C++"}; String lang = String.join("、", parts); // "Java、Python、C++" // 【formatted】Java 15+ String info = "姓名:%s,年龄:%d".formatted("张三", 20); // 【StringJoiner】Java 8,适合构造带前后缀的字符串(如 SQL) java.util.StringJoiner joiner = new java.util.StringJoiner(", ", "[", "]"); joiner.add("A").add("B").add("C"); System.out.println(joiner.toString()); // [A, B, C] } } 

2.3 性能选择决策树

  • 需要拼接字符串?
    ├── 编译期常量(如 "a" + "b")→ 直接用 +(编译器优化)
    ├── 单线程运行时拼接
    │   ├── 次数 < 5 → 用 +(可读性好,性能可接受)
    │   └── 次数 ≥ 5 或循环中 → 用 StringBuilder
    ├── 多线程共享变量拼接 → 用 StringBuffer(线程安全)
    └── 需要分隔符连接多个字符串 → 用 String.join

💡 一句话总结

字符串转数字用 parseInt 要防 NumberFormatException 和空值;字符串相加在循环中必须用 StringBuilder,否则性能灾难。常量折叠让 "a"+"b" 在编译期就变成 "ab",但变量相加会在运行时走 StringBuilder

Read more

Java static避坑:静态与非静态访问规则全解析

Java static避坑:静态与非静态访问规则全解析

🏠个人主页:黎雁 🎬作者简介:C/C++/JAVA后端开发学习者 ❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、游戏、规划、程序人生 ✨ 从来绝巘须孤往,万里同尘即玉京 文章目录 * Java static避坑:静态与非静态访问规则全解析 * 📝 文章摘要 * 一、先搞懂:访问规则的底层逻辑 🧠 * 二、三大核心访问规则(必记)✅ * 规则1:静态方法 → 静态成员 ✅ 允许 * 正确案例:静态方法调用静态变量/方法 * 规则2:静态方法 → 非静态成员 ❌ 禁止(直接访问) * 错误案例:静态方法直接访问非静态成员 * 特殊情况:静态方法间接访问非静态成员(不推荐) * 规则3:非静态方法 → 静态/非静态成员 ✅ 全允许

By Ne0inhk

关于在 IntelliJ IDEA 中安装和配置 Java 17

实战记录: 第一步:使用快捷键 Ctrl+Alt+Shift+S 第二步:下载SDK 关于在 IntelliJ IDEA 中安装和配置 Java 17,以下是详细步骤: 1. 下载并安装 JDK 17 首先,你需要下载并安装 JDK 17: * 推荐来源: * Oracle JDK 17(需登录下载) * OpenJDK 17(如 Adoptium/Eclipse Temurin)(推荐,开源免费) 下载适合你操作系统的版本(Windows、macOS 或 Linux),然后按照提示安装。 2. 在 IntelliJ IDEA 中配置 JDK 17

By Ne0inhk
飞算JavaAI炫技赛:电商系统商品管理模块设计与实现

飞算JavaAI炫技赛:电商系统商品管理模块设计与实现

飞算JavaAI炫技赛:电商系统商品管理模块设计与实现 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。 🔬 每一次代码审查都是我的显微镜观察,每一次重构都是我的化学实验。 🎵 在编程的交响乐中,我既是指挥家也是演奏者。让我们一起,在技术的音乐厅里,奏响属于程序员的华美乐章。 目录 飞算JavaAI炫技赛:电商系统商品管理模块设计与实现 需求分析与规划 一、功能需求 二、核心模块 三、技术选型 飞算JavaAI开发实录 准备AI开发提示词 需求理解阶段 接口设计阶段 表结构设计阶段 逻辑处理阶段 源码生成阶段 优化与调试心得 pom依赖 Mysql配置 redis配置 Elasticsearch配置 YAML配置文件 成果展示与总结 API接口列表 核心代码 开发总结 引用箴言 参考链接 关键词标签 需求分析与规划 一、功能需求 功能需求总览流程图 商品基本信息管理:

By Ne0inhk
Java 手写 AI Agent:ZenoAgent 实战笔记

Java 手写 AI Agent:ZenoAgent 实战笔记

摘要:作为一个长期使用 Java 的后端开发者,我对 AI Agent 的内部运作机制充满了好奇。为了深入理解 Agent 的工作原理,我决定动手写一个简单的 Agent 系统 —— ZenoAgent。本文记录了我在这个过程中的学习心得与技术实践,包括如何手写 ReAct 循环、在分布式环境下实现 Human-in-the-loop、尝试复刻类 o1 的流式思考以及探索错误处理机制。希望这些踩坑经验能给同样想探索 AI 的 Java 开发者一些参考。 👀 在线体验:项目已部署上线,欢迎试玩:线上部署地址 (注:受限于服务器资源,线上本地部署了 Qwen3:8B 模型(参见另一篇博文华为云服务器本地部署大模型实战),虽不如商业模型聪明,但足以演示 Agent 的核心能力) 💡 写在前面:我的学习初衷 市面上已经有了像 LangChain 和 AutoGen

By Ne0inhk