JavaSE常用类之String、StringBuffer、StringBuilder的区别

String 、StringBuffer 、StringBuilder 的区别

String : 不可变的字符序列;底层使用 char[ ] 存储
StringBuffer : 可变的字符序列;线程安全的,效率低;底层使用 char[ ] 存储
StringBuilder : 可变的字符序列;线程不安全,效率高;底层使用 char[ ] 存储

源码分析

String str = new String();        //char[] value = new char[];
String str1 = new String("abc");   //char[] value = new char[]{'a', 'b', 'c'};

StringBuffer sb1 = new StringBuffer();    //char[] value = new char[16]; 底层创建了一个长度16的数组
sb1 = append('a');    //value[0] = 'a';
sb2 = append('b');    //value[1] = 'b';

StringBuffer sb2 = new StringBuffer("abc");       //char[] value = new char["abc".length + 16];

		//StringBuilder 与 StringBuffer 同理

问题 1 : System.out.println(sb2.length());

​ 答案:3,这里不是16,只是在底层创建了一个长度为 16 的数组

问题 2 : 扩容问题:如果要添加的数据长度超过 16 ,则需要扩容底层数组。

默认情况下,扩容为原来容量的两倍 + 2,同时将原来数组的元素复制到新的数组中

指导意义:开发中建议使用 StringBuffer(int capacity) 或 StringBuilder(int capacity)

String的运行速度最慢

posted @ 2021-03-07 10:45  叁玖贰拾柒  阅读(47)  评论(0)    收藏  举报