news 2026/9/3 1:09:43

java学习--String和StringBuffer互转

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习--String和StringBuffer互转

在 Java 中,String是不可变字符串,StringBuffer是可变字符串(线程安全),两者的相互转换是开发中常见操作,以下是具体实现方式、示例及注意事项:

一、String 转 StringBuffer

有两种核心方式:构造方法(推荐)、append()方法。

1. 构造方法(最简洁)

StringBuffer提供了接收String参数的构造方法,直接创建新的StringBuffer对象。

public class StringConvertDemo { public static void main(String[] args) { // 原始 String String str = "Hello Java"; // String 转 StringBuffer(构造方法) StringBuffer sb = new StringBuffer(str); System.out.println("转换后的 StringBuffer: " + sb); // 输出:Hello Java System.out.println("类型:" + sb.getClass().getName()); // 输出:java.lang.StringBuffer } }
2. append () 方法(先创建空对象,再追加)

先创建空的StringBuffer,再通过append()方法把String内容追加进去。

public class StringConvertDemo { public static void main(String[] args) { String str = "Hello World"; // 先创建空 StringBuffer,再追加 String StringBuffer sb = new StringBuffer(); sb.append(str); System.out.println("转换后的 StringBuffer: " + sb); // 输出:Hello World } }

二、StringBuffer 转 String

有三种常用方式:toString()方法(推荐)、String构造方法、substring()方法。

1. toString () 方法(最推荐)

StringBuffer重写了toString()方法,直接返回对应的String对象,效率最高。

public class StringConvertDemo { public static void main(String[] args) { // 原始 StringBuffer StringBuffer sb = new StringBuffer("Hello StringBuffer"); // StringBuffer 转 String(toString()) String str = sb.toString(); System.out.println("转换后的 String: " + str); // 输出:Hello StringBuffer System.out.println("类型:" + str.getClass().getName()); // 输出:java.lang.String } }
2. String 构造方法

通过String的构造方法接收StringBuffer参数(底层仍调用toString())。

public class StringConvertDemo { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Test Convert"); // String 构造方法转换 String str = new String(sb); System.out.println("转换后的 String: " + str); // 输出:Test Convert } }
3. substring () 方法(截取全部内容)

通过substring(0, length())截取StringBuffer的全部内容,返回String

public class StringConvertDemo { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Substring Demo"); // 截取全部内容转换 String str = sb.substring(0, sb.length()); System.out.println("转换后的 String: " + str); // 输出:Substring Demo } }

三、关键注意事项

  1. 不可变性 vs 可变性

    • String转换为StringBuffer后,修改StringBuffer不会影响原String
    • StringBuffer转换为String后,生成的String是不可变的,修改原StringBuffer也不会影响该String
    // 示例:验证独立性 String str = "Original"; StringBuffer sb = new StringBuffer(str); sb.append(" Modified"); // 修改 StringBuffer System.out.println(str); // 输出:Original(原 String 不变) String newStr = sb.toString(); sb.append(" Again"); // 再次修改 StringBuffer System.out.println(newStr); // 输出:Original Modified(原转换后的 String 不变)
  2. 性能建议

    • StringStringBuffer优先用构造方法(少一次追加操作);
    • StringBufferString优先用toString()(底层直接获取字符数组,效率最高);
    • 如果是频繁拼接字符串,建议直接使用StringBuffer/StringBuilder,避免多次StringStringBuffer互转。
  3. 线程安全

    • StringBuffer是线程安全的,StringBuilder是非线程安全的(效率更高),如果不需要线程安全,建议用StringBuilder替代StringBuffer
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 21:19:13

Qt信号槽引用参数问题解析

Qt信号槽引用参数问题解析问题:qt c void slo_response(QByteArray data)槽函数正常,void slo_response(QByteArray& data)槽函数就收不到消息,信号和槽函数是同时修改的,就因为一个&就两种效果,是什么原因呢在…

作者头像 李华
网站建设 2026/9/2 14:32:38

Langchain-Chatchat问答系统混沌工程实验:验证系统鲁棒性

Langchain-Chatchat问答系统混沌工程实验:验证系统鲁棒性 在企业智能化转型的浪潮中,越来越多组织开始尝试将大型语言模型(LLM)应用于内部知识管理、智能客服和文档检索等场景。然而,一个现实问题始终悬而未决&#x…

作者头像 李华
网站建设 2026/9/3 0:02:33

守护数字世界的安全防线:软件测试从业者的责任与使命

在数字技术飞速发展的今天,软件已成为社会运转的核心引擎,从金融交易到医疗保健,再到日常通讯,软件无处不在。作为软件质量的守护者,软件测试从业者肩负着确保产品安全、稳定和可靠的重任。本文基于2025年12月19日的行…

作者头像 李华
网站建设 2026/9/2 15:41:09

Langchain-Chatchat问答系统灰度放量策略:逐步扩大用户范围

Langchain-Chatchat问答系统灰度放量策略:逐步扩大用户范围 在企业知识管理日益智能化的今天,一个常见却棘手的问题摆在面前:如何让员工快速、准确地获取分散在成百上千份文档中的政策信息?传统搜索引擎依赖关键词匹配&#xff0c…

作者头像 李华
网站建设 2026/9/2 14:57:39

Langchain-Chatchat问答系统滚动升级流程:零停机维护操作

Langchain-Chatchat 问答系统的滚动升级实践:实现零停机维护 在企业级智能问答系统日益普及的今天,一个看似不起眼却至关重要的问题浮出水面:如何在不中断服务的前提下完成系统更新?尤其是在金融、医疗或大型制造企业的内部知识库…

作者头像 李华
网站建设 2026/9/2 20:48:32

2.2 频繁内存分配和垃圾回收对于CPU性能的影响

1.频繁内存分配 2.垃圾回收 3.分代GC 4.减少GC的方法1.频繁内存分配 内存分配不是"免费创建对象", 而是操作系统在底层执行复杂操作的过程, 频繁分配会直接消耗CPU资源, 破坏内存效率1).堆内存分配的底层开销(c#引用类型对象)C#中引用类型(如string, List<T>, …

作者头像 李华