String与StringBuffer、StringBuilder的区别
来源:互联网 发布:魔兽世界数据库wlk 编辑:程序博客网 时间:2024/05/17 22:38
1、String是不可变的,StringBuffer和StringBuilder是可变的
String和StringBuffer、StringBuilder内部都是使用char[]数组来存储,但它们之间内部的定义不同
查看源码可知:
String内部声明的char[]数组是 private final char value[];
StringBuffer和StringBuiler都是继承自AbstractStringBuilder,它们内部声明的char[]数组不是private final类型,为:char[] value;
2、StringBuffer是线程安全的,而StringBuiler是非线程安全的
StringBuilder在JDK1.5才开始出现,之前是没有的
StringBuffer是线程安全的是由于StringBuffer内部定义的方法前面都使用Synchronized修饰了,如下:
public synchronized int length() { return count; }而所以StringBuilder的方法没有使用synchronize修饰,所以在多线程的情况下,StringBuffer能保证线程安全,而StringBuilder不能保证
3、String、StringBuffer和StringBuilder之间速度不同,StringBuilder优于StringBuffer优于String
由于String是不能改变的,所以每次对String进行修改,就会重新new一个对象,而StringBuilder和StringBuffer都可以在源对象上进行修改
当需要大量的修改时,String每次会new出很多对象出来,而且很多对象new出来之后,可能就不再使用变成内存垃圾,此时会导致频繁的
垃圾回收,最终造成运行速度变慢。
4、String声明后容量大小不能改变,StringBuffer和StringBuilder可以动态扩容
String由于内部数组声明的是final,所以大小不能再改变
而StringBuilder和StringBuffer初试化容量是16,当使用过程中容量不够后,会自动进行扩容,每次都是新申请一个原空间2倍大小空间,如果
此时容量还不够,就直接扩充到需要的大小。
public StringBuilder() { super(16); }
参考:http://blog.csdn.net/xieyuooo/article/details/6859160
- String与StringBuffer与StringBuilder的区别
- String,StringBuffer与StringBuilder的区别??
- String,StringBuffer与StringBuilder的区别??
- stringbuilder stringbuffer 与String的区别
- String,StringBuffer与StringBuilder的区别
- 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,StringBuffer与StringBuilder的区别
- String,StringBuffer与StringBuilder的区别??
- StringBuilder与StringBuffer和String 的区别
- String,StringBuffer与StringBuilder的区别??
- StringBuilder与StringBuffer和String 的区别
- 招商银行企业银行u-bank电子对账单电子回单的导出打印方法
- IOS loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的用法
- JSP刷新页面的几种方法
- Android系统四层体系结构详解
- allegro 学习过程中遇到的问题
- String与StringBuffer、StringBuilder的区别
- perl 异步超时 打印错误
- 腾讯 算法基础-字符移位
- #POJ1521#Huffman编码
- 浅析 Ruby 里的几个动态方法 (一),send 方法
- RHadoop实践系列之一:Hadoop环境搭建
- 解决MySQL主从复制不一致的情况
- 用户手势检测-GestureDetector使用详解
- Android:解决Gradle DSL method not found: 'runProguard()' 问题