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类的区别

关于java的字符串处理我们一般使用String类和StringBuffer类 那么String类和StringBuffer类的区别在什么地方呢?     1、Stri...
  • zhangchen124
  • zhangchen124
  • 2014年04月29日 10:53
  • 1226

String类和StringBuffer类的异同

相同点: a) String类和StringBuffer类都用来处理字符串。 b) StringBuffer和String类都提供了length(),toString(...
  • lin_lujian
  • lin_lujian
  • 2011年11月06日 21:58
  • 441

String类和StringBuffer类的主要差别

String和StringBuffer是面试时,必考的知识点,我们应该进行牢固的掌握。
  • GUO18735177413
  • GUO18735177413
  • 2015年01月16日 15:18
  • 652

java基础面试题:String和StringBuffer的区别

java基础面试题:String和StringBuffer的区别
  • u013628152
  • u013628152
  • 2016年03月31日 08:15
  • 695

String,StringBuffer, StringBuilder类的常用方法

一、String类的常用方法1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(ind...
  • zhao_yu_lei
  • zhao_yu_lei
  • 2017年05月12日 13:38
  • 786

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

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

String、StringBuffer、StringBudder区别

学习了String类和StringBuffer类,现在从三分面来总结一下String、StringBuffer、StringBudder三者的区别: 是否可变: String:底层利用字符数组保存字符...
  • yajing8
  • yajing8
  • 2017年06月24日 22:00
  • 808

java中String类、StringBuffer类、StringBuilder类的区别(未完待续)

java中String类、StringBuffer类、StringBuilder类的区别,这个问题是java基础问题,老生常谈,也是很重要的一个内容,因为我们每天都在用。也是面试官经常问到的一个问题。...
  • reggergdsg
  • reggergdsg
  • 2016年03月27日 21:11
  • 1413

面试题之:String,StringBuffer与StringBuilder的区别?

String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类...
  • u014381710
  • u014381710
  • 2015年08月24日 23:23
  • 431

java String与StringBuffer区别和转换

区别:   1、StringBuffer是个变量,也就是说它的值是可以改变的。          具体操作如下:                   StringBuffer str...
  • wanggsx20080817
  • wanggsx20080817
  • 2014年02月13日 10:25
  • 2460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String 与 StringBuffer类
举报原因:
原因补充:

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