在 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 } }三、关键注意事项
不可变性 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 不变)性能建议:
String转StringBuffer优先用构造方法(少一次追加操作);StringBuffer转String优先用toString()(底层直接获取字符数组,效率最高);- 如果是频繁拼接字符串,建议直接使用
StringBuffer/StringBuilder,避免多次String和StringBuffer互转。
线程安全:
StringBuffer是线程安全的,StringBuilder是非线程安全的(效率更高),如果不需要线程安全,建议用StringBuilder替代StringBuffer。