String类、StringBuffer类、StringBuilder类的区别
2014-06-13 17:28
621 查看
本文主要介绍String类、StringBuffer类、StringBuilder类的区别 :
区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的。
主要用来处理经常变动的字符串,最多的方法是append、insert和delete方法。
区别:StringBuffer每个方法前都添加了synchronized关键字来保证线程的同步。但是由于StringBuilder不执行同步操作,所以速度更快。
1、举例:执行加法操作a+b
String的内存变化是:重新开辟一块新的内存单元,然后把a丢进来,把b对进来。然后Java中的垃圾回收机制,会自动回收原来的内存单元a、b
StringBuffer内存变化:直接把b添加在a的尾巴后面,不需要好从新开辟新的内存单元。Append方法
2、举例:在a中指定位置插入b
即执行修改操作的速度从高到低为:
StringBuilder > StringBuffer > String。
选择方法:
如果很少修改,使用String,毕竟它最简单;
如果经常修改,且是单线程,使用StringBuilder
如果经常修改,且是多线程,使用StringBuffer。
一、概述
(一)String
字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。(二)StringBuffer
字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的。
(三)StringBuilder
字符串可变量,是线程不安全的。这个类是在JDK 5才开始加入的,是StringBuffer的单线程等价类。(String和StringBuffer类都是JDK 1.0开始)二、主要方法:
java API提供了处理字符串的绝大多数方法,在写程序的时候如果需要处理字符串,一定要先查找API。(一)String
字符串基本操作,详细请参见《String类》(二)StringBuffer
与String类的方法类似,详细请参见《StringBuffer Member》主要用来处理经常变动的字符串,最多的方法是append、insert和delete方法。
(三)StringBuilder
与StringBuffer类完全相同,详细请参见《StringBuilderClass》。区别:StringBuffer每个方法前都添加了synchronized关键字来保证线程的同步。但是由于StringBuilder不执行同步操作,所以速度更快。
三、对比
(一)内存对比
下文主要采用图形的方式,对String与StringBuffer(同StringBuilder)进行对比(不同颜色代表不同的内存):1、举例:执行加法操作a+b
String的内存变化是:重新开辟一块新的内存单元,然后把a丢进来,把b对进来。然后Java中的垃圾回收机制,会自动回收原来的内存单元a、b
StringBuffer内存变化:直接把b添加在a的尾巴后面,不需要好从新开辟新的内存单元。Append方法
2、举例:在a中指定位置插入b
(二)效率对比
由于String类是不可变的,每次对其改变都要创建新字符串对象,所以它是最慢的; StringBuilder不需要执行同步操作,速度要比StringBuffer快。即执行修改操作的速度从高到低为:
StringBuilder > StringBuffer > String。
四、如何选择
String是字符串常量,一旦创建就不能修改;StringBuffer和StringBuilder是字符串可变量,可以修改,但是StringBuffer是线程安全的,StringBuilder是线程不安全的。选择方法:
如果很少修改,使用String,毕竟它最简单;
如果经常修改,且是单线程,使用StringBuilder
如果经常修改,且是多线程,使用StringBuffer。
相关文章推荐
- Java中 String类、StringBuilder类、StringBuffer类 区别与如何选择
- Java中 String类、StringBuilder类、StringBuffer类 区别与如何选择
- String类,Stringbuilder类,Stringbuffer类之间的区别
- String类、StringBuffer类和StringBuilder类的区别
- java中String类、StringBuffer类、StringBuilder类的区别(未完待续)
- Java中String类StringBuffer类和StringBuilder类的区别
- StringBuilder类与String类的区别(C#)
- StringBuilder类与String类的区别(C#)
- ——String类,StringBuffer类,StringBuilder类的简述和操作。
- 黑马程序员——Java基础——String类、StringBuffer类、StringBuilder类、基本数据类型对象包装类操作、正则表达式应用
- 小议String类和stringBuffer类下字符串的区别
- Java String类和StringBuffer类的区别
- String类和StringBuffer类的区别
- [C#][转载]StringBuilder类与 String类的区别
- Java基础13:String类;Stringbuilder类;Stringbuffer类;自动装箱
- 新手学JAVA(二)----String类与StringBuffer类的区别
- Java String类和StringBuffer类的区别
- Java中String类和StringBuffer类的区别
- String类和StringBuffer类的区别
- String类,StringBuffer类,StringBuilder类,基本数据类型对象包装类