package com.day0217_1;
import org.junit.jupiter.api.Test;
/**
* 关于StringBuffer和StringBuilder的使用
*/
public class StringBufferBuilderTest {
/*
String、StringBuffer、StringBuilder三者的异同?
String:不可变的字符序列,底层使用char[]存储
StringBuffer:可变的字符序列:线程安全的,效率低,底层使用char[]存储
StringBuilder:可变的字符序列:jdk5.0新增的,线程不安全的,效率高,底层使用char[]存储
源码分析:
String str=new String();//new char[0];
String str1=new String("abc")//new char[]{'a','b','c'};
StringBuffer sb1=new StringBuffer();//new char[16];底层创建了一个长度为16的数组。
System.out.println(sb1.length());//
sb1.append('a');//value[0]='a';
sb1.append('b');//value[1]='b';
StringBuffer sb2=new StringBuffer();//char value =new char["abc".length()+16];
//问题1.System.out.println(sb2.length());//3
//问题2.扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来的2倍+2,同时将原有的数组中的元素复制到新的数组中。
指导意义:开发中建议大家使用:StringBuffer(int capacity)或StringBuilder(int capacity)
*/
@Test
public void test1(){
StringBuffer sb1=new StringBuffer("abc");
sb1.setCharAt(0,'m');
System.out.println(sb1);
StringBuffer sb2=new StringBuffer();
System.out.println(sb2.length());//0
}
}