String和StringBuffer、StringBuilder的区别在于String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer、StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。
StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但是StringBuilder的性能高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。
StringBuffer的操作方法是append和insert方法,append方法始终将这些字符添加到字符串的末端,而insert则在指定的点添加字符,如a.insert(2,“b”);StringBuilder方法和StringBuffer方法基本相同。
大部分情况StringBuffer > String(在拼接字符串是String速度更快)
大部分情况StringBuilder > StringBuffer
String a1 = "123";//分配到常量池,常量池中无重复元素
String a2 = new String("123");//分配到堆内存,内容一样还是会创建新的对象
String b = "123";//和a1的地址一致
System.out.println(a1 == a2);//false,new String()重写开辟了内存空间
System.out.println(a1.equals(a2));//true,equals比较的是值
System.out.println(a1 == b);//true,指向同一个引用