黑马程序员技术交流社区

标题: StringBuffer 与StringBuilder 的区别 [打印本页]

作者: code2014    时间: 2014-5-20 22:34
标题: StringBuffer 与StringBuilder 的区别
StringBuffer 与StringBuilder 的区别

作者: alax    时间: 2014-5-21 03:37
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
  简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

作者: honey536    时间: 2014-5-21 08:39
我也看了大多数时候用的是StrngBuilder,StringBuilder在单线程的时候用效率较高,在多线程的时候用StringBuffer
作者: 艮昕辶    时间: 2014-5-21 15:14
StringBuilder比StringBuffer要快
StringBuilder是线程不安全的
StringBuffer是线程安全的
作者: code2014    时间: 2014-5-22 17:29
艮昕辶 发表于 2014-5-21 15:14
StringBuilder比StringBuffer要快
StringBuilder是线程不安全的
StringBuffer是线程安全的 ...

谢谢~~~                  
作者: 路漫漫_求索    时间: 2014-5-22 19:55
* String类适用于描述字符串事物:
* 那么他那提供了多个方法,对字符串进行操作。
*
* 常见操作有哪些呢?
1. 获取
*                 1.1        字符串中包含的字符数,也就是字符串的长度?
*                         int length();获取长度
*                 1.2 根据位置获取位置上某个字符?
*                         char charAt(int index);
*                 1.3 根据字符获取该字符在字符串中的位置。
*                         int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。
*                         int indexOf(int ch, int formIndex); 从formIndex指定位置开始,获取ch在字符串中的位置。
*                 
*                         int indexOf(String str);返回的是str在字符串中第一次出现的位置。
*                         int indexOf(String str, int formIndex);从formIndex指定位置开始,获取str在字符串中出现的位置。
*
*                         int lastIndexOf(int ch);
*
* 2. 判断
*                 2.1 字符串中是否包含某一个字符串?
*                         boolean contains(str);
*                         特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1。
*                         表示该str不在字符串中存在,所以也可以用于对指定判断是否包含。
*
*                         if(str.indexOf("aa")!=-1)
*                         该方法即可以判断,又可以获取出现的位置
*
*                 2.2 字符串中是否有内容?
*                         boolean isEmpty();原理就是判断长度是否为0
*
*                 2.3 字符串是否以指定内容开头?
*                         boolean startswith(str);
*
*                 2.4 字符串是否以指定内容结尾?
*                         boolean endswith(str);
*
*                 2.5 判断字符串的内容是否相同?复写了Object类中的equals方法
*                         boolean equlas(str);
*
*                 2.6 判断内容是否相同,并忽略大小写?
*                         boolean equalsIgnoreCase();
*                        
*
*                 
*                        
*/


StringBuffer(是一个容器)
* 特点:-------------------------
* 1,长度是可以变化的。
* 2,可以操作多个数据类型。。、
* 3,最终会通过toString方法变成字符串
* 1, 存储
*                 StringBuffer append();将指定数据作为参数添加到已有数据结尾处。
*                 StringBuffer insert(index,数据);可以将数据插入到指定index位置
*
* 2, 删除。
*                 StringBuffer delete(start,end);删除缓冲区中的数据,包含start,不包含end
*                 StringBuffer deleteCharAt(index);删除指定位置的字符。
*
* 3,获取。
*                 char charAt(int index);//查单个字符
*                 int indexOf(String str);//查多个字符
*                 int lastIndexOf(String str);//从后往前查
*                 int length();
*                 String substring(int start,int end);//获取从指定位置开始到结尾处之前的字符
*
* 4,修改。
*                 StringBuffer replace(start,end,String);
*                 void setCharAt(int index, char ch);
*
* 5,反转.
*                 StringBuffer reverse();
*
* 6,将指定缓冲区数据,存储到指定数组中。
*                 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);               
*
* JDK1.5版本之后出现了StringBuilder
* ---------------------
* StringBuffer是线程同步。
* StringBuilder是线程不同步。
* -------------------
* 以后开发建议使用StringBuilder

希望能帮助你明白两个的区别~~~
作者: 飘渺≮★耘    时间: 2014-5-23 11:32
stringbuffer是线程安全,相应的性能就低了,stringbuilder是非线程安全,性能比stringbuffer好
作者: 曾倩倩    时间: 2014-7-1 09:45
1.  在执行速度方面的比较:StringBuilder >  StringBuffer   
2.  StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3.  StringBuilder:线程非安全的
  StringBuffer:线程安全的
    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:1.如果要操作少量的数据用 = String
                    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
                    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
作者: 小徐_y8nUx    时间: 2015-1-8 12:10
学习了!!!
作者: 377413612    时间: 2015-1-27 23:36
学习了 ,好的!
作者: 770365954    时间: 2015-11-13 20:51
StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)   简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2