文章目录
- 1.特点
- 2.常见方法
- 3.练习:测试字符串连接
- 4.StringBuilder和StringBuffer的区别
1.特点
- 封装了char[]数组
- 是可变的字符序列
- 提供了一组可以对字符内容修改的方法
- 常用append()来代替字符串做字符串连接”+”
- 内部字符数组默认初始容量是16:super(str.length() + 16);
- 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。
intnewCapacity=value.length*2 + 2; - StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全
2.常见方法
append()
3.练习:测试字符串连接
package partThree;
/* 本类用于练习字符串的拼接*/
public class TestString3 {public static void main(String[] args) {//需求,将26个字母拼接10000次String s = "abcdefghijklmnopqrstuvwxyz";//method1(s);method2(s);}//使用方式一进行字符串的拼接private static void method1(String s) {//1.创建一个变量用来保存拼接后的结果String result = "";//5 给程序添加一个计时的功能//5.1在循环开始前记录当前时间作为开始时间long t1 = System.currentTimeMillis();//2.执行循环10000次for (int i = 0; i < 10000; i++) {//每轮循环中拼接字符串result = result + s ;}//5.2在循环结束后记录当前时间作为结束时间long t2 = System.currentTimeMillis();//4.循环结束后打印拼接的效果System.out.println(result);//5.3打印循环消耗的时间System.out.println(t2-t1);System.out.println(t2); //1631609138674 当前时间与协调世界时间(1970年1月1日00点)的毫秒差}//使用方式二进行字符串的拼接private static void method2(String s) {//1.创建工具类对象StringBuffer sb = new StringBuffer();StringBuilder sb2 = new StringBuilder();//5.1在循环执行之前记录当前时间作为开始时间long t1 = System.currentTimeMillis();//2.让循环执行10000次进行拼接for (int i = 0; i < 10000; i++) {//3.在每一轮循环中,使用工具类append()进行拼接/* 我们常用的拼接方法就是StringBulder/StringBuffer中的append()*///sb.append(s);sb2.append(s);}//5.2在循环执行之后记录当前时间作为结束时间long t2 = System.currentTimeMillis();//4.在循环结束后打印拼接效果//System.out.println(sb);System.out.println(sb2);//6 求出拼接花费的时间System.out.println(t2-t1);}
}
StringBuffer比StringBulder效率要更好一点,但是实际使用中,效率更好的值比较有限,所以使用哪个都行,但都是比方法一效率要高很多;
4.StringBuilder和StringBuffer的区别
- 在线程安全上 :
- StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
- StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
- 在执行效率上,StringBuilder > StringBuffer > String
- 源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。