您的位置:首页 > 产品设计 > UI/UE

String、StringBuffer、StringBuilder的比较

2016-07-12 14:02 411 查看
在Java中对字符串的处理主要使用String、StringBuffer和StringBuilder这三个类。下面我们就来学习和比较一下这三个字符串处理类。

-String

String类型的对象是不可变的对象,所有对String类型的变量的改变都是开辟了一个新的空间,生成了一个新的String对象,然后让原来的String类型的变量指向新的String对象。

实例化String对象的方式:

1)直接赋值

String str="hello";


2)通过new关键字创建

String str=new String("hello");


我们来对比一下这两种方式实例化String对象的不同:

第一种直接赋值的方式,就是开辟了一个空间,内容是“hello”,然后

str对象指向这个空间。

第二种方式实际上呢是开辟了两个空间,一个是没有对象指向的空间,内容是”Hello”,一个是有对象指向的空间,内容也是”hello”。如下图所示:



通过上述描述,很明显直接赋值实例化String对象肯定是比使用new关健字实例化String对象效率要高。多以在实际开发中更多的是以直接赋值的方式来创建字符串。

-StringBuffer

StringBuffer是可变的对象,所有对StringBuffer对象的改变都是对原StringBuffer对象的改变。

StringBuffer同时也是线程安全的,StringBuffer类的方法前面都有关键字synchronized,都是同步方法,也就是说如果有多个线程操作同一个StringBuffer对象是顺序进行的。

-StringBuilder

StringBuilder也是可变的对象,并且处理速度比StringBuffer要快。

但不是线程安全的。

总结:

大部分情况下StringBuffer的处理速度比String的处理速度要快

当然也有特殊的情况:

String str1="Welcome"+" to"+" my"+"contry!";
StringBuffer str2=new StringBuffer("Welcome").append("to").append(" my").append("contry!");


这时候生成str1的速度要比生成str2的速度要快的多!

因为String str1=”Welcome”+” to”+” my”+”contry!”;

其实就是:

String str1=”Welcome to my contry!”,当然不需要多少处理时间。

StringBuilder的处理速度要比StringBuffer的处理的速度要快

但StringBuffer是线程安全的,StringBuilder不是线程安全的

所以在需要对字符串做大量改变的时候,建议使用StringBuffer或StringBuilder

在单线程下建议使用StringBuilder,在多线程下建议使用StringBuffer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息