String、StringBuffer、StringBuilder的区别
来源:互联网 发布:看电视直播软件 编辑:程序博客网 时间:2024/06/03 22:01
String
String不可变,StringBuffer、StringBuilder可变,还有什么区别?String:查源码,类的声明是:public final,清楚的知道,fianl是不可改变的。但是操作字符串的时候,你感觉字符串变长了(改变?)原理是这样的:String name1 = "Luoce";String name2 = name1 + " Jack";字符串变?错!字符串对象的内容是无法更改的!反编译这段程序,运行机制其实是:String s = "Luoce";String s1 = (new StringBuilder().append(s).append(" Jack").toString()); 一旦我们字符串的值改变,内存创建一个新的字符串对象,原来的对象就会变为垃圾被GC回收掉,非常复杂操作来进行的String拼接
StringBuffer、StringBuilder的区别
所以,涉及到字符串操作的,我们一般使用StringBuffer或者StringBuilder,两者有什么区别StringBuffer和StringBuilder都集成了AbstractStringBuilder,而StringBuffer大部分方法都是synchronized,线程安全,但是StringBuilder没有,线程不安全。而且因为线程安全的提升,牺牲的运行速度。因为StringBuffer要维持同步锁,这肯定要消耗部分资源。
总结
运行速度:StringBuilder > StringBuffer > String Stirng:不可变 StringBuffer线程不安全,StringBuffer线程安全
写个Demo测试速度差异
package demo;/** * String、StringBuffer、StringBuilder速度测试比较 * @author SYFC */public class StringStringBufferStringBuilderTest { /** * string速度 */ public void stringTest(){ long startTime = System.currentTimeMillis(); String str = null; for (int i = 0; i < 20000; i++) { str = str + i +","; } System.out.println(System.currentTimeMillis()-startTime); } /** * StringBuffer速度 */ public void stringBuffer(){ long startTime = System.currentTimeMillis(); StringBuffer strBuffer = new StringBuffer(); for (int i = 0; i < 20000; i++) { strBuffer.append(i+","); } System.out.println(System.currentTimeMillis() - startTime); } /** * StringBuilder速度 */ public void stringBuilder(){ long startTime = System.currentTimeMillis(); StringBuilder strBuilder = new StringBuilder(); for (int i = 0; i < 20000; i++) { strBuilder.append(i+","); } System.out.println(System.currentTimeMillis()-startTime); } /** * 测试 */ public static void main(String[] args) { StringStringBufferStringBuilderTest test = new StringStringBufferStringBuilderTest(); test.stringTest(); test.stringBuffer(); test.stringBuilder(); }}结果:103353
阅读全文
0 0
- String,StringBuffer,StringBuilder的区别
- String StringBuffer StringBuilder的区别
- String, StringBuffer, StringBuilder的区别?
- String,StringBuffer, StringBuilder 的区别
- String,StringBuffer,StringBuilder的区别
- String , StringBuffer, StringBuilder的区别
- String 、 StringBuffer 、StringBuilder 的区别
- String StringBuffer StringBuilder的区别
- String、StringBuffer、StringBuilder的区别
- String, StringBuffer, StringBuilder的区别
- String StringBuffer StringBuilder的区别
- string、stringbuffer、stringbuilder的区别
- String、StringBuffer 、StringBuilder 的区别
- String,StringBuffer,StringBuilder的区别
- String ,StringBuffer,StringBuilder的区别
- String,StringBuffer,StringBuilder的区别
- String StringBuffer StringBuilder的区别
- String,StringBuffer,StringBuilder的区别?
- leetcode 309 best time to sell or buy stock
- 数据仓库简介---概况
- 高性能MYSQL——6章查询执行的基础(1)
- Android 获取验证码倒计时实现
- EditText限制输入表情,限制输入字数长度
- String、StringBuffer、StringBuilder的区别
- Java数据结构与算法解析(十四)——二叉堆
- hadoop入门之利用hadoop来对文档数据归类统计案例wordcount
- unity computshader的入门教程,别听半灌水瞎BB。
- Dalvik 字节码的读取
- swift + 百度地图 初始化BMKMapView崩溃 不报错 无打印 (一个愚蠢的错误。。。)
- 机器学习开篇-记于2017-10-24
- 帮助和变量强制转换
- DrawerLayout+Tablayout+PullTofresh+Fragment(Viewpage)