String类
- 字符串是常量,他们的值在创建后不能更改.字符串的底层是一个被final修饰的数组,不能改变,是一个常量.
- String类在进行字符串的相加时,内存就会有多个字符串,会导致占用空间多,效率低下.
- 比如: String str = “a” + “b” + “c”,要使它等于"abc",会创建五个字符串,要先创建"a",“b”,“c”,三个字符串,先使"a",“b"相加变成"ab”,再使"ab" + “c” 变成"abc",所以过程极其繁琐,这时就要采用StringBuilder类进行相加.
StringBuilder类
- 被称为字符串缓冲区,可以提高字符串的操作效率,底层也是一个数组,但是没有被final修饰,可以改变长度. byte[] value = new byte[16]
- 在"a",“b”,"c"相加时,会按顺序按照索引 0,1,2放入数组中,可以直接看成一个"abc"字符串.
- StringBuilder 在内存中始终是一个数组,占用空间小,效率高,如果超出StringBuilder的容量,可以自动扩容.
1. 构造方法
StringBuilder(); 创建一个空的字符串缓冲区对象
StringBuilder(String s): 根据传入的内容创建一个字符缓冲区对象.
2. 成员方法
- StringBuilder append(Object obj); 添加内容
- StringBuilder reverse(); 反转内容
- String toString(); 将缓冲区内容转为字符串
public static void main(String[] args)
{
StringBuilder sb1 = new StringBuilder("sikadi");
System.out.println(sb1);
//使用append方法无需接收返回值
sb1.append(10);
sb1.append("Lifu");
sb1.append("||luxiya");
System.out.println(sb1);
System.out.println();
System.out.println("==========================");
//链式编程:方法的返回值是一个对象,可以根据对象继续调用方法
StringBuilder sb2 = new StringBuilder();
sb2.append("Lifu").append(" do ").append("mo ").append("ximasi");
System.out.println(sb2);
System.out.println("==================");
sb2.reverse();
System.out.println("字符串反转后为");
System.out.println(sb2);
}
3. StringBuilder和String可以相互转换:
- String->StringBuilder:可以使用StringBuilder的构造方法
StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。 - StringBuilder->String:可以使用StringBuilder中的toString方法
public String toString():将当前StringBuilder对象转换为String对象。
public static void main(String[] args)
{
//String->StringBuilder
String str = "噫吁嚱";
System.out.println("str:"+str);
StringBuilder bu = new StringBuilder(str);
//往StringBuilder中添加数据
bu.append(" 危乎高哉 ");
System.out.println("这是StringBuiler:"+bu);
//StringBuilder->String
String s = bu.toString();
System.out.println("这是String: " + s);
}
4. StringBuilder 与 StringBuffer
两者用法几乎一样,但是StringBuffer是StringBuilder的线程安全版.StringBuffer中含有synchronized锁,可以保证线程安全,StringBuilder的方法则没有该关键字,所以不能保证线程安全,但是字符串中通常不太需要线程安全,而讲究速度,StringBuffer中的锁会降低效率,所以在不特别需要线程安全时推荐使用StringBuilder.