Java——面试:String 和 StringBuffer 的区别?

相同点:

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 集合类中时会出 现问题。

你可能感兴趣的:(java,面试,开发语言)