【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 } }