Java 可变字符串StringBuilder&StringBuffer 区别联系 构造器 方法

本文详细介绍了Java中的可变字符串StringBuilder和StringBuffer,包括它们的构造器、方法如append和insert,以及线程安全性和效率。StringBuilder是JDK1.5引入的,非线程安全但效率更高,适合单线程操作;StringBuffer线程安全但效率较低,适用于多线程环境。两者的主要方法功能相似,如追加和插入字符串,但StringBuffer的方法带有`synchronized`关键字。
摘要由CSDN通过智能技术生成

可变字符串StringBuilder&StringBuffer

  • 字符串的分类:

    • 不可变字符串:String。在地址不变的情况下,字符串不可改变
    • 可变字符串:StringBuilder,StringBuffer。地址不变的情况下,想把“ab”变成“abcd”是可能的,直接追加即可sb.append("cd")
  • 区别与联系

  • String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。
  • StringBuffer类则代表一个字符序列可变的字符串,可通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String
    • StringBuffer:JDK1.0开始 效率低 线程安全
  • StringBuilder类在JDK1.5新增,与StringBuffer相似,构造方法和方法基本相同。区别在于StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder。将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。
    • StringBuilder:JDK1.5开始 效率高 线程不安全
  • StringBuffer的主要StringBufferappendinsert方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。 append方法总是在缓冲区的末尾添加这些字符; insert方法将insert添加到指定点。

  • StringBuilder&StringBuffer底层:非常重要的两个属性:

    /**该值用于字符存储
     * The value is used for character storage.
     */
    char[] value;
    /**计数是使用的字符数
     * The count is the number of characters used.
     */
    int count;
    
  • 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。 字符数组扩容,自动扩容时长度翻倍后加2。new = old * 2 + 2,相关源码如下:

    class AbstractStringBuilder
        
    private void ensureCapacityInternal(int minimumCapacity) {
         
        // overflow-conscious code
        if (minimumCapacity - value.length > 0) {
         
            value = Arrays.copyOf(value,
                    newCapacity(minimumCapacity));
        }
    }
    
    private int newCapacity(int minCapacity) {
         
            // overflow-conscious code 左移一位相当于乘2
            int newCapacity = (value.length << 1) + 2;
            if (newCapacity - minCapacity < 0) {
         <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值