相同点:
String 和 StringBuffer,它们可以储存和操作字符串, 即包含多个字符的字符数据。
String 和 StringBuffer 的区别有以下几点:
1.String 类提供了数值不可改变的字符串。而 StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以 使用 StringBuffer 。典型地,你可以使用 StringBuffers 来动态构造字符数据。
2.String 实现了 equals 方法, new String(“abc”).equals(new String(“abc”) 的结果为 true,StringBuffer 没有实现 equals 方法, new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为 false 。
3.我们要把 1 到 10000 的所有数字拼起来,组成 一个串。import java.util.Date; public class Test01 {public static void main(String[] args) {//StringBuffer 把 1 到 10000 的所有数字拼起来,组成一个字符串StringBuffer stringBuffer = new StringBuffer();long start = new Date().getTime();for(int i=0;i<10000;i++){stringBuffer.append(i);}long end = new Date().getTime();System.out.println(end-start);//String 把 1 到 10000 的所有数字拼起来,组成一个字符串String string = new String();long start1 = new Date().getTime();for(int i=0;i<10000;i++){string = string + i;}long end1 = new Date().getTime();System.out.println(end1-start1);} }
上面的代码效率很高,因为只创建了一个 StringBuffer 对象,而下面的代码效率很低,因为创建了 10001 个对象。
4. StringBuilder 与 StringBuffer相比,后者是线程安全的,前者是线程不安全,所以在使用时,对少量数据进行操作时选择String,对大量数据进行操作时,多线程使用StringBuffer,单线程使用StringBuilder。
5.Sring 覆盖了 equals 方法和 hashCode 方法,而 StringBuffer 没有覆盖 equals 方法和 hashCode 方法,所以,将 StringBuffer 对象存储进 Java 集合类中时会出 现问题。