跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Java StringBuffer
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Java StringBuffer = '''StringBuffer''' 是 Java 中用于处理可变字符串的一个关键类,属于 <code>java.lang</code> 包。与不可变的 <code>String</code> 类不同,<code>StringBuffer</code> 允许动态修改字符串内容,适用于频繁进行字符串拼接、插入、删除等操作的场景。它是线程安全的,适合多线程环境使用。 == 概述 == <code>StringBuffer</code> 是一个可变的字符序列,内部通过动态数组实现,能够高效地进行字符串操作。它的主要特点包括: * '''可变性''':内容可以修改,而不需要创建新对象。 * '''线程安全''':方法使用 <code>synchronized</code> 关键字修饰,保证多线程环境下的安全性。 * '''高性能''':适合频繁修改字符串的场景,避免了 <code>String</code> 类因不可变性导致的性能问题。 == 构造方法 == <code>StringBuffer</code> 提供了多个构造方法: * <code>StringBuffer()</code>:创建一个初始容量为 16 的空缓冲区。 * <code>StringBuffer(int capacity)</code>:指定初始容量。 * <code>StringBuffer(String str)</code>:用指定字符串初始化缓冲区。 示例: <syntaxhighlight lang="java"> StringBuffer sb1 = new StringBuffer(); // 默认容量 16 StringBuffer sb2 = new StringBuffer(32); // 指定容量 32 StringBuffer sb3 = new StringBuffer("Hello"); // 初始内容 "Hello" </syntaxhighlight> == 常用方法 == 以下是 <code>StringBuffer</code> 的核心方法: === 追加内容(append)=== <code>append()</code> 方法用于在字符串末尾追加内容,支持多种数据类型: <syntaxhighlight lang="java"> StringBuffer sb = new StringBuffer("Java"); sb.append(" Programming"); // 追加字符串 sb.append(2023); // 追加数字 System.out.println(sb); // 输出: "Java Programming2023" </syntaxhighlight> === 插入内容(insert)=== <code>insert()</code> 在指定位置插入内容: <syntaxhighlight lang="java"> StringBuffer sb = new StringBuffer("HelloWorld"); sb.insert(5, " "); // 在索引 5 处插入空格 System.out.println(sb); // 输出: "Hello World" </syntaxhighlight> === 删除内容(delete)=== <code>delete(int start, int end)</code> 删除指定范围的字符: <syntaxhighlight lang="java"> StringBuffer sb = new StringBuffer("JavaStringBuffer"); sb.delete(4, 10); // 删除索引 4 到 9 System.out.println(sb); // 输出: "JavaBuffer" </syntaxhighlight> === 反转字符串(reverse)=== <code>reverse()</code> 反转字符串内容: <syntaxhighlight lang="java"> StringBuffer sb = new StringBuffer("ABCDE"); sb.reverse(); System.out.println(sb); // 输出: "EDCBA" </syntaxhighlight> == 容量管理 == <code>StringBuffer</code> 内部使用动态数组,当内容超出当前容量时,会自动扩容(通常为原容量的 2 倍 + 2)。可以通过以下方法管理容量: * <code>capacity()</code>:返回当前容量。 * <code>ensureCapacity(int minimumCapacity)</code>:确保最小容量。 示例: <syntaxhighlight lang="java"> StringBuffer sb = new StringBuffer(); System.out.println(sb.capacity()); // 输出: 16 sb.ensureCapacity(50); System.out.println(sb.capacity()); // 输出: 50 </syntaxhighlight> == 性能优化 == 在单线程环境下,可以使用非线程安全的 <code>StringBuilder</code> 替代 <code>StringBuffer</code> 以获得更高性能。两者 API 完全兼容。 == 实际应用案例 == === 案例 1:动态 SQL 拼接 === 在数据库操作中,<code>StringBuffer</code> 可用于动态构建 SQL 语句: <syntaxhighlight lang="java"> StringBuffer sql = new StringBuffer("SELECT * FROM users WHERE 1=1"); if (condition1) sql.append(" AND name = 'Alice'"); if (condition2) sql.append(" AND age > 20"); System.out.println(sql); </syntaxhighlight> === 案例 2:日志格式化 === 在日志系统中格式化多字段消息: <syntaxhighlight lang="java"> StringBuffer log = new StringBuffer(); log.append("[INFO] ").append(new Date()) .append(" - User ").append(userId) .append(" performed action: ").append(action); System.out.println(log); </syntaxhighlight> == 与 String 的对比 == {| class="wikitable" |+ String vs StringBuffer ! 特性 !! String !! StringBuffer |- | 可变性 || 不可变 || 可变 |- | 线程安全 || 是(因不可变) || 是(同步方法) |- | 性能 || 适合少量操作 || 适合频繁修改 |- | 内存效率 || 可能产生较多临时对象 || 更高效 |} == 内存模型 == <mermaid> graph LR A[StringBuffer Object] --> B[char[] value] A --> C[int count] B --> D['H'] B --> E['e'] B --> F['l'] B --> G['l'] B --> H['o'] </mermaid> == 数学计算 == 扩容公式(当需要扩容时): <math> newCapacity = (oldCapacity \times 2) + 2 </math> == 总结 == <code>StringBuffer</code> 是处理可变字符串的高效工具,特别适合: * 需要频繁修改字符串内容的场景 * 多线程环境下的字符串操作 * 避免创建大量临时字符串对象的情况 对于单线程环境,可以考虑使用更轻量级的 <code>StringBuilder</code>。 [[Category:编程语言]] [[Category:Java]] [[Category:Java字符串]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)