一篇看懂Java中String、StringBuffer 和 StringBuilder的含义和区别

String

String 是不可变的,这意味着每次当你对 String 进行修改操作(如拼接)时,都会创建一个新的 String 对象(创建新的对象在意味着在内存空间中消耗一定的内存,在开发大型项目时,需要尽量避免消耗内存空间的操作)。

public class StringExample {  
    public static void main(String[] args) {  
        String str = "Hello";  
        str = str + " World!"; // 这里会创建一个新的String对象  
        System.out.println(str); // 输出 "Hello World!"  
  
        // String的重要方法(非修改方法):  
        // substring(int beginIndex, int endIndex) - 返回一个新字符串,它是此字符串的一个子字符串  
        String subStr = str.substring(0, 5); // "Hello"  
        System.out.println(subStr);  
  
        // concat(String str) - 将指定字符串连接到此字符串的结尾  
        String concatenatedStr = str.concat(" Again!"); // 注意:这将创建新的String对象  
        System.out.println(concatenatedStr); // 输出 "Hello World! Again!"  
    }  
}

StringBuffer

StringBuffer 是可变的,并且它是线程安全的。它提供了修改字符串内容的方法,而不需要创建新的对象

public class StringBufferExample {  
    public static void main(String[] args) {  
        StringBuffer sb = new StringBuffer("Hello");  
        sb.append(" World!"); // 在原对象上修改,不创建新对象  
        System.out.println(sb.toString()); // 输出 "Hello World!"  
  
        // StringBuffer的重要方法(修改方法):  
        // append(String str) - 将指定字符串追加到此字符序列  
        // insert(int offset, String str) - 在此字符序列的指定位置插入指定字符串的子字符串  
        // delete(int start, int end) - 移除此序列的子字符串中的字符  
        sb.insert(5, "Beautiful "); // 在索引5的位置插入"Beautiful "  
        sb.delete(12, 17); // 删除从索引12到16的字符(不包括17)  
        System.out.println(sb.toString()); // 输出 "HelloBeautiful World"  
    }  
}

StringBuilder

StringBuilder 与 StringBuffer 非常相似,但它是非线程安全的。由于没有同步开销,因此在单线程应用中通常比 StringBuffer 更快。

public class StringBuilderExample {  
    public static void main(String[] args) {  
        StringBuilder sb = new StringBuilder("Hello");  
        sb.append(" World!"); // 在原对象上修改,不创建新对象  
        System.out.println(sb.toString()); // 输出 "Hello World!"  
  
        // StringBuilder的重要方法与StringBuffer相同,但它是非线程安全的  
        // append, insert, delete等方法与StringBuffer中的相同  
        sb.insert(5, "Beautiful ");  
        sb.delete(12, 17);  
        System.out.println(sb.toString()); // 输出 "HelloBeautiful World"  
    }  
}

注意

  • 当你在循环中拼接大量字符串时,使用 StringBuilder 或 StringBuffer 而不是 String 会更加高效,因为它们避免了在每次拼接时都创建新的字符串对象。
  • 如果你的代码在多线程环境中运行,并且需要修改字符串,那么应该使用 StringBuffer 以确保线程安全。如果你确定你的代码只会在单线程环境中运行,那么使用 StringBuilder 会更加高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值