一、
Strin和StringBuilder,StringBuffer最大的不同在于,前者是不可变的对象,因为在String的底层中使用final来修饰的,而Stringbuilder和Stringbuffer都是继承自AbstractStringBuilder,在AbstractStringBuilder中使用char[] 字符数组来保存子符串,但是没有使用final修饰,虽然String可以直接用+进行字符串的拼接,可是每次都会创造新的字符对象,且都是临时的对象,这就造成内存的浪费,影响效率;而StringBuilder和Stringbuffer则无需担心这个问题。
二、
StringBuilder和Stringbuffer是一个可变的对象,可以预存分配空间,在加入新字符串时,不会创造新的临时对象,而是直接操字符串本身;同时StringBuilder和Stringbuffer还可以进行链式调用,既可以不断调用自身的方法,因为append()方法会返回“this”。
StringBuilder str2=new StringBuilder("今天天气不错空气更好");
str.append("!").replace(0, 6, "天气很好呀");// 替换字符,从指定位置开始到指定位置结束
System.out.println(str2);
System.out.println("................");
// 删除字符 (方法一)
str2.delete(5, 7);//从指定位置开始到指定位置结束
System.out.println(str2);
System.out.println("..............");
// 删除字符(方法二)
str2.deleteCharAt(5);
System.out.println(str2);
System.out.println("..............");
三、
SringBuffer是比StringBuilder 更早的类,因为其使用了同步锁,所以相对与StringBuilder更具有安全性,但在提高安全性的同时却付出了性能的下降,所以后来又有了StringBuilder,它没有更高的安全性却更加高效。
四、
相同情况下,使用StringBuiler相比于StringBuffer能获得10%~15%左右的性能提高,但需要承担多线程不安全的风险。