StringBuilder 的 substring() 方法不改变原对象,因为它返回新创建的 String 对象,不操作内部数组,原内容、容量、长度均不变。

StringBuilder 本身没有 subString 方法,但可以通过 substring()(注意是小写 s)获取子字符串,且完全不影响原对象。
为什么能“不改变自身”?
因为 StringBuilder.substring(int start, int end) 返回的是一个 新创建的 String 对象,不是对 StringBuilder 内部字符数组的引用,也不调用任何修改操作(如 delete、replace 等)。原 StringBuilder 的内容、容量、长度全部保持不变。
正确用法示例
直接调用 substring() 即可:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
StringBuilder sb = new StringBuilder("HelloWorld");
String part = sb.substring(5, 10); // 返回 "World"
System.out.println(part); // World
System.out.println(sb.toString()); // HelloWorld(未变)
注意事项
- 方法名是
substring(小写 s),不是subString(大写 S)——后者不存在,编译会报错 - 参数含义与 String 一致:左闭右开区间,
start ≥ 0,end ≤ length(),越界抛StringIndexOutOfBoundsException - 返回类型是
String,不是StringBuilder;如需继续构建,得手动 new 新对象:new StringBuilder(sb.substring(2, 5))
和 String 的 substring 行为一致
该方法底层会复制对应区间的字符生成新 String,不共享底层数组(JDK 7u6 以后 String 已不再共享 char[]),所以安全、独立、无副作用。
立即学习“Java免费学习笔记(深入)”;

















