String 与 StringBuffer类

转载 2006年06月09日 04:10:00

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对象,并处理多少次无谓的强制类型转换哪。

Java中的String、StringBuffer和Math类

  • 2008年01月29日 17:25
  • 102KB
  • 下载

黑马程序员_笔记十四_String和StringBuffer类

----------android培训、java培训期待与您交流!---------- String类声明时单词的首字母是大写,所以String类本身是一个类,但是此类在使用时有比较多的要求,而且在...
  • zlfjxs
  • zlfjxs
  • 2014年05月19日 11:01
  • 164

常用API(一)——String、StringBuffer与基本类型包装类

String关于String这个特殊类,我到现在都还没搞明白,我觉得可能主要是由于没有搞懂JVM的内存结构引起的,但还是对其进行以下记录。 字符串是一个特殊的对象。 字符串一旦初始化就不可以被改变。S...

全面解释java中StringBuilder、StringBuffer、String类之间的关系

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它...

Java的字符类String、StringBuffer与StringBuilder异同对比分析

Java的字符类String、StringBuffer与StringBuilder异同对比分析 Java String是一个“不可变常量字符串”对象,final属性定义。之所以这么说,是从S...

黑马程序员——String类与StringBuffer

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- String类 String类适用于描述字符串事物。 那么他就提供了多...

JAVA的StringBuffer类和String比较

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存...

Java基础——String类、StringBuffer、Integer

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-String概述凡是带”“的都是String的实例对象。String s1 = "abc";s1是一个类类型变量,...

黑马----String,StringBuffer,基本数据类型对象包装类浅记

---------------------- android培训、java培训、期待与您交流! ----------------------   一.String: 字符串是一个特殊的对象 ...

java基础复习-Math和String StringBuffer类使用

/* * Math:用于数学运算的类。 * 成员变量: * public static final double PI * public static final double E ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String 与 StringBuffer类
举报原因:
原因补充:

(最多只允许输入30个字)