【java基础】java字符串之StringBuffer和StringBuilder

【一】简述区别

package com.sxf.test.string;

public class StringBufferStringBuilderTest {
    
    public static void main(String[] args) {
        
    }
    
    public static void test01(){
        //线程安全,char数组扩容的公式:value.length * 2 + 2;
        StringBuffer buffer=new StringBuffer();
        buffer.append("a");
        //每次toString都是new一个新的String对象,保存在堆里。
        //toStringCache属性,在每次toString方法,只要不向对象里添加新的字符串,就使用缓存的char数组返回新字符串。
        buffer.toString();
        buffer.trimToSize();
        buffer.capacity();
        
        //线程不安全,char数组的扩容公式: value.length * 2 + 2;
        StringBuilder builder=new StringBuilder();
        builder.append("a");
        //每次toString都new一个新的String对象,保存在堆里。
        builder.toString();
        builder.trimToSize();
        builder.capacity();
        
        //不同点
        //StringBuffer和StringBuilder。StringBuffer是线程安全的类,StringBuilder是非线程安全的类
        //
        
        //相同点
        //StringBuffer和StringBuilder都继承AbstractStringBuilder里
        //StringBuffer和StringBuilder都是fianl修饰的类,不可被重写。
        //StringBuffer和StringBuilder都默认初始化char数组的长度为16,或者带参构造(String.length+16)
        //trimToSize()方法,是去掉char数组没有被存放数值的的多余空间。底层是一次数组的copy
        
    }

}
View Code
原文地址:https://www.cnblogs.com/shangxiaofei/p/8256780.html