目录
1.StringBuffer的定义与使用
由于java中字符串是不可变的,需要对字符串频繁拼接是会产生新字符串,占用大量的方法区内存
可以使用java.lang下的StringBuffer和StringBuilder
//创建一个初始化容量为16个byte[]数组。(字符串缓冲区对象)
StringBuffer stringBuffer = new StringBuffer();
//拼接字符串使用append()方法
stringBuffer.append("a");
stringBuffer.append(3.14);
stringBuffer.append(true);
//append方法底层进行追加时,如果byte数组满了,会自动扩容
优化StringBuffer的性能:创建StringBuffer对象时给定一个初始化容量,减少底层扩容次数。
即给一个合适的初始化容量,提高程序的执行效率
StringBuffer sb = new StringBuffer(100);
sb.append("hello");
sb.append("world");
2.StringBuffer与StringBuilder的区别
- StringBuffer中的方法都有“synchronized”关键字修饰,表示StringBuffer在多线程环境下运行是安全的
- StringBuilder中的方法没有“synchronized”关键字修饰,表示StringBuilder在多线程环境下运行是不安全的
3.试题
3.1String不可变得原因
源代码中,String类中有一个byte[]数组,这个数组采用了final修饰。而数组一旦创建长度不可变,并且被final修饰后的引用一旦指向某个对象后,不可以再指向其他对象,所以String是不可变的
3.2StringBuffer与StringBuilder可变的原因
源代码中,StringBuffer/StringBuilder内部是一个byte[]数组,这个byte[]数组没有被final修饰,StringBuffer/StringBuilder的初始化容量为16,当存满之后会进行扩容,调用了数组拷贝的System.arraycopy()。所以StringBuffer/StringBuilder适合与使用字符串的频繁拼接操作
传送门
上一章:JavaSE进阶 第七章 常用类 (一) String
下一章:JavaSE进阶 第七章 常用类 (三) 基本数据类型对应的8个包装类