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
相关推荐
chemddd6 分钟前
豆包生成 亚马逊链接的视频
学习·交友
weixin_431600447 分钟前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计11 分钟前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
工业HMI实战笔记19 分钟前
解放双手,声控未来:抗噪语音交互如何革新嘈杂车间的HMI操作体验
人工智能·学习·自动化·制造
霸道流氓气质21 分钟前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军23 分钟前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐31 分钟前
maven部分构建参数讲解
java·maven
ZC跨境爬虫36 分钟前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
知识分享小能手43 分钟前
线性代数学习教程,从入门到精通,相似矩阵及二次型 — 知识点详解(9)
学习·线性代数·机器学习
kisbad1 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript