String、StringBuffer、StringBuilder对比
1、String
用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String a ="a"; //假设a指向地址0x0001
a ="b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
因此String的操作都是改变赋值地址而不是改变值操作。对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象
2、StringBuffer
StringBuffer是一个从JDK1.0开始就存在的类,它就像String类一样,不过其内部成员是可以修改的。
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer 上的主要操作是append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而z.insert(4,
"le") 将更改字符串缓冲区,使之包含“starlet”。3、StringBuilder
StringBuilder是一个可变的字符序列,是JDK5.0新增的。此类提供一个与StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
它和StringBuffer提供相同的接口。
相同点:它们继承相同的父类:Abstract StringBuilder
它们实现相同的接口:java.io.Serializable, CharSequence
它们基本上对外提供相同的方法
不同点:StringBuffer类是线程安全的,所有StringBuffer提供的public方法基本上都是synchronized。StringBuilder类不是线程安全的,它的方法没有被synchronized锁修饰。相比而言,StringBuilder类会略微快一点
4、总结
如果要操作少量的数据用 String
单线程操作字符串缓冲区下操作大量数据用StringBuilder
多线程操作字符串缓冲区下操作大量数据用StringBuffer
如果一个字符串变量是在方法里面定义的,这种情况可能只有一个线程访问它,不存在不安全的因素,则用StringBuilder,如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用那么最好使用StringBuffer。
String是不可变的对象, 因此在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。
不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。
String、StringBuffer、StringBuilder对比的更多相关文章
- String StringBuffer StringBuilder 对比
1.StringBuffer是线程安全的,StringBuilder是非线程安全的 2.对String的修改其实是new了一个StringBuilder并调用append方法,然后调用toSt ...
- String StringBuffer StringBuilder对比
1.相同点 三者都可以用来存储字符串类型数据. 2.不同点 String类型对象内容不可变,每变化一次都会创建一个新的对象. StringBuiler与StringBuffer的内容与长度均可以发生变 ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- String StringBuffer StringBuilder (转)
转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
随机推荐
- css 的一些知识点的整理
css的一些标签整理 background-attachment: scroll;背景图可滚动 background-attachment: fixed; 固定背景的位置,不随着滚动条移动而移动 ...
- 使用Nwjs开发桌面应用体验
之前一直用.net开发桌面应用,最近由于公司需要转为nodejs,但也是一直用nodejs开发后台应用,网站,接口等.近期,需要开发一个客户端,想着既然nodejs号称全栈,就试一下开发桌面应用到底行 ...
- Words to Use Instead of "Very"
- [UOJ 12]猜数
Description
- HDU 3094 A tree game
Problem Description Alice and Bob want to play an interesting game on a tree.Given is a tree on N ve ...
- [POI2006]OKR-Periods of Words
题目描述 一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串P是串A的前缀, 当且仅当存在串B, 使得 A = PB. 如果 P A 并且 P 不是一个空串,那么我们说 P 是A ...
- 【HNOI2004】L语言
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- hdu 5583 Kingdom of Black and White
Kingdom of Black and White Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- VS2012代码对齐快捷键
1.选中想要对齐的代码 2.全选代码后按住Ctrl+K,Ctrl+F键,就可以了
- json转化为对象数组
1.ascx传值给aspx aspx页面 <%@ Page Title="" Language="C#" MasterPageFile="~/_ ...