字符串的分类
- 不可变字符串:String
- 可变字符串:StringBuilder,StringBuffer
StringBuilder底层:非常重要的两个属性
public class Test01 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
//创建StringBuilder的对象:
StringBuilder sb3 = new StringBuilder();
//表面上调用StringBuilder的空构造器,实际底层是对value数组进行初始化,长度为16
StringBuilder sb2 = new StringBuilder(3);
//表面上调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对value数组进行初始化,长度为你传入的数字
StringBuilder sb = new StringBuilder("abc");
System.out.println(sb.append("def").append("aaaaaaaa").append("bbb").append("ooooooo").toString());;//链式调用方式:return this
}
}
可变和不可变字符串
StringBuilder可变字符串
在StringBuilder这个对象的地址不变的情况下,想把“abc”变成“abcdef”是可能的,直接追加即可
String、StringBuffer、StringBuilder区别与联系
- String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。
- StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String
- JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder
StringBuilder:JDK1.5开始 效率高 线程不安全
StringBuffer:JDK1.0开始 效率低 线程安全