String、StringBuffer和StringBuilder区别
来源:互联网 发布:微信授权登陆api java 编辑:程序博客网 时间:2024/05/29 13:24
1.三者在执行速度方面:String < StringBuffer < StringBuilder
String:
输入:
long strTimeBefore = System.currentTimeMillis(); String string = "abc"; for(int i=0;i<100000;i++) { string += "def"; } long strTimeAfter = System.currentTimeMillis(); System.out.println("string = " + string); System.out.println("runningTime = " + (strTimeAfter - strTimeBefore) + "ms");
输出:
StringBuffer:string = abcdefdef……
runningTime = 42947ms
使用StringBuffer输出:
StringBuilder:string = abcdefdef……
runningTime = 9ms
使用StringBuilder输出:
2.速度差异的原因string = abcdefdef……
runningTime = 8ms
可以看出,String类型是常量,是不能改变的。但是我们平时使用的时候,明明是改变了:String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量
其实:当test执行操作时,重新在内存开辟了一个空间来存储 "abcdef” ,换句话说,重新创建了一个叫test的变量,而原来test会被GC回收掉。而创建新的String变量是非常耗时的。String test = "abc"; test = test + "def"; System.out.println(test);
而StringBuffer和StringBuilder就不一样了,它们是字符串变量,当执行更改时,是直接对内存中的当前对象做相应的操作,省去创建过程,肯定就会快很多。
3.StringBuffer和StringBuilder的线程安全问题
可以看出StringBuilder是比StringBuffer快一些的,那这些快出的时间来自哪里呢?
StringBuffer:线程安全的
StringBuilder:线程非安全的
原因:
多线程问题。当多个线程访问StringBuffer时,JVM能保证StringBuffer的操作是安全的;而使用StringBuilder时,JVM并不能保证其安全。
总结:
String:操作少量数据
StringBuffer:多线程环境下,操作大量数据
StringBuilder:单线程环境下,操作大量数据
4.StringBuffer和StringBuilder的共同点
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)
StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
对知识做以总结,希望不吝赐教
- String, StringBuffer 和 StringBuilder区别
- String、StringBuffer和StringBuilder 区别
- String ,StringBuffer 和 StringBuilder 区别
- String , StringBuffer 和 StringBuilder 区别
- String StringBuffer 和StringBuilder区别
- 【String,StringBuffer和StringBuilder区别】
- String、StringBuffer和StringBuilder区别
- StringBuilder、StringBuffer和String区别
- String、StringBuilder和StringBuffer区别
- string.StringBuilder和StringBuffer区别
- String、StringBuffer和StringBuilder区别
- String、StringBuffer和StringBuilder 区别
- String和StringBuffer、StringBuilder区别
- StringBuffer和StringBuilder和String的区别
- String和StringBuffer和StringBuilder的区别
- String 和StringBuffer和StringBuilder区别
- String、StringBuffer和StringBuilder使用和区别
- String和StringBuilder和StringBuffer区别
- c语言数组、sizeof()及strlen()
- apache服务Forbidden 403问题精彩总结
- iOS-Carthage 安装以及使用
- MySQL学习系列一
- Android SDK版本号与API Level 的对应关系
- String、StringBuffer和StringBuilder区别
- 取数字问题
- nutz 自定义sql语句
- 前端训练营第一天笔记
- 前端学习笔记
- VS2017配置opencv3.2在MFC单文档中显示图片
- 架构之路--volatile关键字和线程通信
- Python center 用法
- 【SSLGZ 2081】书本整理