String,StringBuffer,StringBuilder的区别
2015-10-27 13:21
267 查看
String
String str="abc";这是先去找“abc”,如果有,则更改指向,没有,新建一个“abc”,再更改指向。String对象为常量,一旦创建就不可更改,所以我们把字符串b赋值给字符串a的时候,其实是更改指向,
String a="Hello";String b="World";a=a+b的操作不是直接在a后面增加,而是去找有没有“HelloWorld”,有则更改指向,没有,则新建一个String对象,所以在做字符串拼接的时候,用String对象直接+的效率是很低的,(每次都要去找,找不到就新建。)
StringBuffer
StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使StringBuffer类的append方法追加字符
比 String使用 + 操作符高效得多。
StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
StringBuilder
StringBuffer属于线程安全,相对为重量级
StringBuilder属于非线程安全,相对为轻量
线程安全的概念:
网络编程中许多线程可能会同时运行一段代码。当每次运行结果和单独线程运行的结果是一样的,叫做线程安全。为了达到线程安全的目的在一定程度上会降低程序的性能。所以在单线程中,StringBuilder的性能要比StringBuffer高。多线程为了线程安全需要采用StingBuffer。
String str="abc";这是先去找“abc”,如果有,则更改指向,没有,新建一个“abc”,再更改指向。String对象为常量,一旦创建就不可更改,所以我们把字符串b赋值给字符串a的时候,其实是更改指向,
String a="Hello";String b="World";a=a+b的操作不是直接在a后面增加,而是去找有没有“HelloWorld”,有则更改指向,没有,则新建一个String对象,所以在做字符串拼接的时候,用String对象直接+的效率是很低的,(每次都要去找,找不到就新建。)
StringBuffer
StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使StringBuffer类的append方法追加字符
比 String使用 + 操作符高效得多。
StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
StringBuilder
StringBuffer属于线程安全,相对为重量级
StringBuilder属于非线程安全,相对为轻量
线程安全的概念:
网络编程中许多线程可能会同时运行一段代码。当每次运行结果和单独线程运行的结果是一样的,叫做线程安全。为了达到线程安全的目的在一定程度上会降低程序的性能。所以在单线程中,StringBuilder的性能要比StringBuffer高。多线程为了线程安全需要采用StingBuffer。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题