JAVA中String类和StringBuffer类的区别
来源:互联网 发布:海洋电影源码 编辑:程序博客网 时间:2024/06/05 16:55
当我们进行字符拼接时,最好使用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对象,并处理多少次无谓的强制类型转换哪。
练习题:
(1) 下列关于String类和stringBuffer类说法正确的有(ABCD)。
A、String类是不可变类,一个String对象所包含的字符串内容永远不会被改变
B、如果对字符串中的内容经常进行操作,特别是内容要修改时,应使用StringBuffer
C、StringBuffer类是可变类,一个StringBuffer对象所包含的字符串内容可以被添加或修改
D、字符串缓冲区支持可变的字符串
- JAVA中String类和StringBuffer类的区别
- Java中String、StringBuilder和StringBuffer类的区别
- java 中StringBuffer类(或者StringBuilder)和String的区别
- Java中StringBuffer类和String的区别
- JAVA中String和StringBuffer的区别
- Java中String和StringBuffer的区别
- Java中String 和StringBuffer的区别?
- java中String和StringBuffer的区别
- java中 string 和 stringBuffer的区别
- Java中String 和StringBuffer的区别
- Java中String和StringBuffer的区别
- java中String和StringBuffer的区别
- Java中String 和StringBuffer的区别
- Java中String和StringBuffer的区别
- Java中String和StringBuffer的区别
- Java中String和StringBuffer的区别
- Java中String和StringBuffer的区别?
- Java中String 和StringBuffer的区别
- JAVA读取XML文件并利用该文件对数据库进行配置操作
- I2C之知(六)--s3c2440用I2C接口访问EEPROM
- 【DFS】 hdu1547 Bubble Shooter
- Multiple Vulnerabilities in Scrutinizer NetFlow & sFlow Analyzer
- Announcing the availability of ModSecurity extension for IIS
- JAVA中String类和StringBuffer类的区别
- CyanogenMod 10 (UNOFFICIAL) for Galaxy Tab 2 10.1 WiFi (P5110) ~ 0815
- Python基础教程——1基础知识
- Codeforces Round #130 (Div. 2)
- Beyond Apache: ModSecurity for IIS/Nginx is Coming
- 路漫漫其修远兮,吾将上下而求索——学习是一个过程
- 反思~这一年
- Android学习笔记(四)View和Layout
- Maven添加本地依赖