String、StringBuffer、StringBuilder之间的区别-整理中
2015-06-10 23:37
411 查看
1.在字符串拼接的效率上。
StringBuilder > StringBuffer > String
原因:
StringBuilder类进行字符串拼接是线程不安全的,没有限制,一般用在方法内部使用,可用于单线程。
StringBuffer类进行字符串拼接是线程安全的,一般用在方法外部对类属性进行操作,上面俩个类方法都基本一样,拼接字符串只使用原来的对象,不会创建新的对象,可用于多线程。
String类进行字符串拼接会重新创建新对象,新对象是原对象和拼接对象的组合。String创建对象引用是在栈上,实际的字符放在堆内存上。其实字符串有个很重要的特性,那就是字符串常量。笔者认为JDK设计者设计String主要是做这个用处,而不是用于字符串的拼接。系统中的静态常量就是很好的说明,设计者始终相信一个字符串的重用比让一个字符串拼接要频繁。在JAVA中如果是通过“+”和new出的字符串对象,都是不会共享,因为这些对象的值是放在堆上,引用是放在栈上,只有在栈和常量池上的数据才能够共享,字符串常量和基本类型数据常量都存放在常量池中。
明天继续。
StringBuilder > StringBuffer > String
原因:
StringBuilder类进行字符串拼接是线程不安全的,没有限制,一般用在方法内部使用,可用于单线程。
StringBuffer类进行字符串拼接是线程安全的,一般用在方法外部对类属性进行操作,上面俩个类方法都基本一样,拼接字符串只使用原来的对象,不会创建新的对象,可用于多线程。
String类进行字符串拼接会重新创建新对象,新对象是原对象和拼接对象的组合。String创建对象引用是在栈上,实际的字符放在堆内存上。其实字符串有个很重要的特性,那就是字符串常量。笔者认为JDK设计者设计String主要是做这个用处,而不是用于字符串的拼接。系统中的静态常量就是很好的说明,设计者始终相信一个字符串的重用比让一个字符串拼接要频繁。在JAVA中如果是通过“+”和new出的字符串对象,都是不会共享,因为这些对象的值是放在堆上,引用是放在栈上,只有在栈和常量池上的数据才能够共享,字符串常量和基本类型数据常量都存放在常量池中。
明天继续。
相关文章推荐
- UGUI 实现Button长按效果(RepeatButton)
- 08_ui_传值
- Exchange 2010 DNS query fail 问题
- Java.lang.StringBuilder类
- DUILIB入门简明教程
- 50款强力jquey,js 插件推荐
- verilog调试--- $test$plusargs和$value$plusargs的用法
- DUILIB创建不规则窗体
- Queue And ConcurrentQueue in .NET
- duilib库的点九技术
- OC学习之道:UIImagePickerController的使用,使用UIImagePickerController调用本地摄像头,本地相册
- 单例模式:单例类的标准写法 - iOS - UI基础知识总结13
- UITableViewCellSeparatorStyleNone去掉分割线
- uitableview持续练习
- 关于druid数据连接池抛出的 connection holder is null 异常
- UIViewController中的viewDidLoad实现和调用
- 【源代码】StringBuilder和StringBuffer震源深度分析
- ios UITableView separatorColor 默认颜色
- 关于UItextView 的一些应用和将uitableview滚动到对应的位置
- js匹配表单name的值获取value