Java中String和String Buffer两种字符串类型之间的区别和联系
来源:互联网 发布:刚性攻丝编程 编辑:程序博客网 时间:2024/05/21 14:25
Java中String类和StringBuffer类的区别
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。
而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。
当我们进行字符拼接时,最好使用StringBuffer类而非String类,因为前者将比后者快上百倍。
的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:
String str="You are nice.";
str+="I love you so much.";
如果用StringBuffer类的话,代码如下:
StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");
从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:
经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。
而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。
可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。
0 0
- Java中String和String Buffer两种字符串类型之间的区别和联系
- java中String和StringBuffer两种字符串类型之间的区别和联系
- Java中String="hello"和new String("hello')两种创建字符串的区别
- java中Date类型和String类型之间的转换
- Java中String、StringBuffer、StringBuilder的联系和区别
- 关于JAVA中String="abc"和String=new String("abc")的区别与联系
- String 和String Buffer的区别
- Java中String类型和其他数据类型之间的转换
- String,StringBuffer,StringBuilder之间的区别和联系
- DBNull.Value,null,String.Empty之间的区别和联系
- String,StringBuffer,StringBuilder之间的区别和联系
- Windows8 String 和 Buffer之间的转化
- java中String,StrignBuffer和StringBuilder之间的区别
- java中,字符串String类型的""和null值的区别
- java中的引用类型概念和String两种实例化方式的区别
- JavaScript中String(a)和new String(a)两种生成字符串的方法的使用区别
- Cstring和string的区别和联系
- Java 中String Buffer 和 StringBuilder类
- 【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录
- PopupWindow和AlertDialog区别
- begining for my weibo life
- Flex 简单的DataGrid 例子
- marine plywood and brown brown film faced plywood pvxl
- Java中String和String Buffer两种字符串类型之间的区别和联系
- URAL 1486(二维字符串hash)
- sku过滤,判断提交过来的sku和完成sku数组比对
- ESXi5.1物理主机root用户密码的破解方法(一)
- 链表的常见操作
- struts2核心
- 新入手SSD,不想重新安装系统,怎么破
- HttpClient4.3教程(转载)
- Java 中的语法糖 (Syntactic Sugar)