String 和 StringBuffer

转载 2007年10月08日 16:03: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对象,并处理多少次无谓的强制类型转换哪。

 

常见对象_StringBuffer的两个小面试题、String和StringBuffer分别作为参数传递

package cn.itcast_08; /* * 面试题 * 1:String,StringBuffer,StringBuilder的区别? * A:String是内容不可变的,...
  • L1585931143
  • L1585931143
  • 2016年11月16日 22:15
  • 791

常见对象_StringBuffer和String的相互转换

package cn.itcast_07; /* * 为什么我们要类之间的转换: * A -- B的转换 * 我们把A转换为B,其实是为了使用B的功能。 * B -- A的转换 ...
  • L1585931143
  • L1585931143
  • 2016年11月15日 21:13
  • 473

Java基础之String、StringBuffer与StringBuilder的区别及应用场景

1 String、StringBuffer与StringBuilder (1)String 字符串常量; /** Strings are constant; their values cann...
  • chenliguan
  • chenliguan
  • 2016年07月14日 18:35
  • 5925

Java String为什么是不可变类,StringBuffer与StringBuilder区别

熟悉Java的都知道String类是不可变,但String类为什么设计成不可变类,如何做到不可变没有仔细想过。 String为什么设计成不可变类? 1.Java字符串池的设计方式。     Strin...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月10日 15:15
  • 2048

Java中字符数组、String类、StringBuffer三者的相互转换

一、StringBuffer与String的相互转换 1、将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型。 String...
  • strggle_bin
  • strggle_bin
  • 2017年04月07日 15:06
  • 2414

String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?

本内容是我从各处转载整理得来,是我的学习笔记,如有涉及到版权问题,请给我留言。 或者内容中有不正确的地方,也请各位大神能帮我指出更改,谢谢! 一、区别 1、String是字符串常量,而String...
  • dorapan1987
  • dorapan1987
  • 2015年03月17日 20:36
  • 888

String和StringBuffer类型数据进行参数传递问题

1.String和StringBuffer做为形参传递 通常参数传递有两种:                 基本类型:不会影响实际参数的值                 引用类型:会影响实际参数的...
  • xiaofei__
  • xiaofei__
  • 2016年11月02日 14:36
  • 1122

基于面试题String与StringBuffer区别引出的简单深入

String,StringBuffer以及StringBuilder区别分析以及测试 本篇的个人理解也是站在巨人的肩膀上进行了个人的总结,同时对部分源码的简单分析...
  • C_freedomc
  • C_freedomc
  • 2016年09月06日 17:13
  • 493

黑马程序员——Java基础---String、StringBuffer和正则表达式

主要介绍了String、StringBuilder以及正则表达式的写法。
  • qq_23868283
  • qq_23868283
  • 2014年11月26日 17:43
  • 638

StringBuffer的常用方法与操作

stringbuffer的常用方法与操作
  • hoho_12
  • hoho_12
  • 2016年04月13日 20:30
  • 1371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String 和 StringBuffer
举报原因:
原因补充:

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