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

文章标题:String,StringBuilder,StringBuffer

2017-10-25 21:02 211 查看
三者在执行速度方面的比较:StringBuilder > StringBuffer > String

当然这个是相对的,不一定在所有情况下都是这样。

比如String str=”hello”+”world”的效率就比 StringBuilder st=new StringBuilder().append(“hello”).append(“world”)要高

关于String:

String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。

String类其实是通过char数组来保存字符串的

String是“字符创常量”,也就是不可改变的对象,因此String类的方法实现都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。

在这里要永远记住一点:

  “对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”

一个小例子:

String str1 = “hello world”;

String str2 = new String(“hello world”);

String str3 = “hello world”;

String str4 = new String(“hello world”);

在这里(str1==str3) but (str2!=str4)

这是因为通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。

关于StringBuffer与StringBuilder

StringBuilder类是在JDK5.0中引入的,这个类的前身是Stringbuffer,StingBuffer其效率稍有些低,但允许采用多线程的方式执行

StringBuilder:线程非安全的

StringBuffer:线程安全的

当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

添加或删除字符的操作。

对于三者使用的总结:

如果要操作少量的数据用 String

单线程操作字符串缓冲区 下操作大量数据 用StringBuilder

多线程操作字符串缓冲区 下操作大量数据 用StringBuffer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: