String类和StringBuffer类的区别

相同点:

  1. String类和StringBuffer类都用来处理字符串。
  2. String类和StringBuffer类都提供了length()、toString()、charAt()和substring()方法,它们的用法在两个类中相同。
  3. 对于String类和StringBuffer类,字符在字符串中的索引位置都从0开始。

不同点:

  1. String类是不可变类 ,而StringBuffer是可变类。String对象创建后,它的内容无法改变。
public class TestString {
    public static void main(String[] args) {
        String s = new String("java");
        s.concat("test");       //连接test字符串
        s.replace('j', 'k');    //将字符串中的j换为k
        s.toUpperCase();        //将字符串中的所有字母换为大写
        s.toLowerCase();        //将字符串中的所有字母换为小写    
        System.out.println(s);

        StringBuffer sb = new StringBuffer("java");
        sb.append("test");      //在原字符串末尾连接test字符串
        sb.replace(0,2,"no");   //将位置0到2的字符串替换为no
        System.out.println(sb); 
    }
}

输出结果:

java
novatest

2.String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法。

        String s1 = new String("java");
        String s2 = new String("java");
        System.out.println(s1.equals(s2));
        //打印true,在String类中equals()方法是内容的比较,尽管s1和s2是两个不同的对象

        StringBuffer sb1 = new StringBuffer("java");
        StringBuffer sb2 = new StringBuffer("java");
        System.out.println(sb1.equals(sb2));//打印false

3.两个类都覆盖了Object类的toString()方法,但是各自的实现方式不一样:

  • String类的toString()方法返回当前String实例的本身的引用。
  • StringBuffer类的toString()方法返回一个以当前StringBuffer的缓冲区中的所有字符为内容的新的String对象的引用。
        String s = "java";
        System.out.println(s==s.toString());        //打印true,==比较的是两个对象的地址值
        System.out.println(s.equals(s.toString())); //打印true

        StringBuffer sb = new StringBuffer("java");
        System.out.println("java"==sb.toString());  //打印false
        System.out.println(sb.equals(sb.toString()));//打印false

4.String类对象可以用操作符”+”进行连接,而StringBuffer类对象之间不能用”+”操作符进行连接。

采用StringBuffer可以减少Java虚拟机创建String对象的次数,减少动态分配和回收内存的次数,因此可以使程序性能大大提高。

单线程运行效率:
String << StringBuffer < StringBuilder

发布了34 篇原创文章 · 获赞 20 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ChengXuYuanXingCheng/article/details/66972551