黑马程序员技术交流社区
标题:
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