StringBuilder和StringBuffer
目录
- StringBuilder和StringBuffer
- 特点
- 常见方法
- 练习:测试字符串连接
- StringBuilder和StringBuffer的区别
特点
封装了char[]数组
是可变的字符序列
提供了一组可以对字符内容修改的方法
常用append()来代替字符串做字符串连接”+”
内部字符数组默认初始容量是16:super(str.length() + 16);
如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2;
StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全
常见方法
append()
练习:测试字符串连接
创建包: cn.tedu. api
创建类: TestString3.java
package cn.tedu.api;
/**本类用于练习字符串的拼接*/
public class TestString3 {public static void main(String[] args) {//需求:将26个字母拼接10000次String s = "abcdefghijklmnopqrstuvwxyz";//method1(s);//使用方式1拼接字符串method2(s);//使方式2拼接字符串}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()对字符串s进行拼接//sb.append(s);sb2.append(s);}//5.2获取结束时间long t2 = System.currentTimeMillis();//4.打印拼接后的效果//System.out.println(sb);System.out.println(sb2);//5.3计算拼接耗费的时间System.out.println(t2-t1);}private static void method1(String s) {//1.定义一个变量,用来保存最终拼接的效果String result = "";//2.创建循环拼接10000次//5.给程序添加一个计时的功能//5.1获取循环开始的时间long t1 = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {//3.进行字符串拼接result = result+s;}//5.2获取循环结束的时间long t2 = System.currentTimeMillis();//4.打印查看拼接完毕的效果System.out.println(result);//5.3计算拼接总共耗费的时间System.out.println(t2-t1);}
}
StringBuilder和StringBuffer的区别
1.在线程安全上 :
–StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
–StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
2. 在执行效率上,StringBuilder > StringBuffer > String
3.源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。