您的位置:首页 > Web前端

String类和StringBuffer类的区别

2017-03-27 15:54 316 查看
相同点:

String类和StringBuffer类都用来处理字符串。

String类和StringBuffer类都提供了length()、toString()、charAt()和substring()方法,它们的用法在两个类中相同。

对于String类和StringBuffer类,字符在字符串中的索引位置都从0开始。

不同点:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: