String,StringBuffer,StringBuilder的区别
2015-07-30 11:27
399 查看
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String对象是不可变的,其实看看String源码就知道了。
在new String的时候,String 中的3个成员变量value,count,offset都是final的,当然String类也是final的,所以一旦初始化后不能修改的。
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
StringBuffer,与StringBuilder都实现了相同的接口,而且都继承相同的父类,不同的是,StringBuffer的大部分方法都是同步的,所以是线程安全,StringBuilder没有同步,所以通常情况下效率上StringBuilder是优于StringBuffer的。
StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
StringBuffer与StringBuilder随着append会扩大value[]的容量,这里具体做法是使用System类中的arraycopy方法拷贝,这个方法是调用底层本地方法来处理的,类似于直接使用C的指针操作,比较快。
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String对象是不可变的,其实看看String源码就知道了。
在new String的时候,String 中的3个成员变量value,count,offset都是final的,当然String类也是final的,所以一旦初始化后不能修改的。
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
StringBuffer,与StringBuilder都实现了相同的接口,而且都继承相同的父类,不同的是,StringBuffer的大部分方法都是同步的,所以是线程安全,StringBuilder没有同步,所以通常情况下效率上StringBuilder是优于StringBuffer的。
StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
StringBuffer与StringBuilder随着append会扩大value[]的容量,这里具体做法是使用System类中的arraycopy方法拷贝,这个方法是调用底层本地方法来处理的,类似于直接使用C的指针操作,比较快。
相关文章推荐
- UIView的autoresizingMask属性探究
- UIView的autoresizingMask属性探究
- uibuttton中的等价替换(方便实用)
- 【Android UI】状态栏和toolbar颜色一致
- 62. Unique Paths
- 队列(Queue) C 语言实现
- HDOJ 5147 Sequence II 树阵
- 格而知之2:UIView的autoresizingMask属性探究
- UILabel常用属性小结
- mui.fire()用法
- iOS UITableView使用详解
- UITableView介绍
- 安卓主界面UI不能实现下载
- UIViewController的presentedViewController,presentingViewController和parentViewController三个属性
- Equivalent Strings (字符串相等?)
- poj 2778 AC自动机+快速幂(DNA Sequence)
- 多线程入门教程四:MFC的多线程
- iOS开发UI篇—常见的项目文件介绍
- FreeBSD Kqueue的实现原理
- iOS UILabel根据字符串长度自动适应宽度和高度