package com.atguigu.java;
import org.junit.Test;
/*面试题(很重要)
String StringBuffer StringBuilder三者的异同?
String:不可变的字符序列(主要是String的char中加了final);底层结构使用Char[]数组存储;
StringBuffer:可变的字符序列;线程安全的,效率低;底层结构使用Char[]数组存储;
StringBuilder: 可变的字符序列;线程不安全,效率高;JDK5.0新增的;底层结构使用Char[]数组存储;
*/
public class StringBufferBuliderTEST {
@Test
public void test1(){
StringBuffer s = new StringBuffer("abc");//底层创建了一个长度为16的数组;
s.setCharAt(0,'m');//单引号中的字符实际上表示一个整数,而用双引号引起的字符串,代表的是一个指向无名数组起始字符的指针。
System.out.println(s);
//利用append方法可以直接在数组中添加
StringBuffer s2 = new StringBuffer("abc");//char[] value = new char["abc".length() + 16];
//问题1 System.out.println(s.length());//3
//System.out.println(s2.length()); 0
//问题2 扩容问题;如果要添加的数据底层数组不够了,需要扩容数组
//默认情况下,扩容为原来容量的2倍 +2,同时将原有数组中的元素复制到新的数组中。
//开发中 使用StringBuffer(int capacity) 或 StringBuilder(int capacity)
}
public static void main(String[] args) {
}
}
左闭右开
总结:
增 append()
删 delete()
改 setCharAt() / replace()
插 insert(int offset, xxx)
长度 length()
遍历 for() + charAt()
查 charAt()