String类
- 字符串是常量;它们的值在创建后不能更改
- 字符串的底层是一个被final修饰的数组,不能被改变,是一个常量
private final char value[]
- 如下进行字符串拼接操作时,很浪费空间
String str1 = "a";
String str2 = "b";
String str3 = "c";
str1 += str2;
str1 += str3;
StringBuilder类
- 字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串),底层也是一个数组,但是没有被final修饰,可以被改变长度
byte[] value = new byte[16]
- StringBuilder在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder的容量,会自动扩容
StringBuilder常用方法
StringBuilder()
构造一个不带任何字符的字符串生成器,初识容量为16字符。StringBuilder(String str)
构造一个字符串生成器,并初始化为指定的字符串内容append(String str)
追加内容到StringBuilder对象的末尾length()
获取当前StringBuilder长度toString()
将当前StringBuilder对象转化为String对象
StringBuilder sb1 = new StringBuilder();
System.out.println("sb1: "+sb1);
StringBuilder sb2 = new StringBuilder("abc");
System.out.println("sb2: "+sb2+" 字符串长度为:"+sb2.length());
sb2.append("def");
System.out.println("sb2: "+sb2+" 字符串长度为:"+sb2.length());
sb2.append("ghi").append(true);
System.out.println("sb2: "+sb2+" 字符串长度为:"+sb2.length());
sb2.insert(4, "!!!!!");
System.out.println("sb2: "+sb2+" 字符串长度为:"+sb2.length());
String str = sb2.toString();
System.out.println(str);