码迷,mamicode.com
首页 > 编程语言 > 详细

Java:String、StringBuffer和StringBuilder的区别

时间:2015-04-01 11:19:25      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

  在公司实习期间,慢慢的体会到了作为一名开发人员,公司的Code convention是多么的重要。

下面一条便是公司列举出来的。

1. Rather than “String”, “StringBuffer” is recommended to be used to concatenate character strings. 

Especially when a string is constructed by concatenating data in a loop, or when a string content is changed for numerous amount of times before it is returned/displayed, “StringBuffer” should be used. Sample code could be like:

                        StringBuffer stringBuffer = new StringBuffer();

                        for (int i=0; i<100; i++) {

                            stringBuffer.append("sample string");     

                        }

                        return stringBuffer.toString();

大致意思是说,在连接字符串时,比起String,更推荐使用StringBuffer。尤其是当一个String在一个循环中用来连接数据的时候,或者在这个String返回之前它的内容需要频繁修改时,这时候就应该使用StringBuffer了。

查了下网上的资料。加上别人的参考,下面是自己的总结部分。希望能帮到大家。

1. String:它是不可变(immutable)的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收。

2. StringBuffer 字符串变量(线程安全),适用于多线程程序中,保证同步性,如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。

2.1 初始化: 

StringBuffer s = new StringBuffer(“abc”);

2.2 转换 : 需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

StringBuffer s = “abc”; //赋值类型不匹配

StringBuffer s = (StringBuffer)”abc”;    //不存在继承关系,无法进行强转

2.3 StringBuffer对象和String对象之间的互转的代码如下:

String s = “abc”;

StringBuffer sb1 = new StringBuffer(“123”);

StringBuffer sb2 = new StringBuffer(s);   //String转换为StringBuffer

String s1 = sb1.toString();              //StringBuffer转换为String .toString()

StringBuilder 字符串变量(非线程安全),适用于单线程程序中,不保证同步性。简要的说, String 类和 StringBuffer/StringBuilder 类的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类进行改变的   时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String  而如果是使用 StringBuffer/StringBuilder 类则结果就不一样了,每次结果都会对 StringBuffer/StringBuilder 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下推荐使用 StringBuffer/StringBuilder ,特别是字符串对象经常改变的情况下。

用法:append,insert, remove,replace, delete

StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);

上面代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

两者的常用操作:append(), toString(), insert(), reverse(), delete()等。
在大部分情况下 StringBuilder > StringBuffe 以为前者不需要考虑线程安全。

Java:String、StringBuffer和StringBuilder的区别

标签:

原文地址:http://www.cnblogs.com/wmx-rj/p/4383080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!