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

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk