`
yheye
  • 浏览: 65789 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java语言中string and 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对象,并处理多少次无谓的强制类型转换哪。
分享到:
评论

相关推荐

    Java中String,StringBuffer与StringBuilder的区别

    Java中String,StringBuffer与StringBuilder的区别和用法。

    Java 中 String,StringBuffer 和 StringBuilder 的区别及用法

    主要介绍了Java 中 String,StringBuffer 和 StringBuilder 的区别及用法的相关资料,需要的朋友可以参考下

    Java语言中StringBuffer的用法

    StringBuffer的常用方法实例,如:append、insert等等。其中,StringBuffer与String的区别详细做了例子。

    Java String 与 StringBuffer 用法区别

    String类用来表示那些创建后就不会再改变的字符串,它是immutable的。而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法

    java 中String和StringBuffer与StringBuilder的区别及使用方法

    主要介绍了java 中String和StringBuffer与StringBuilder的区别及使用方法的相关资料,在开发过程中经常会用到String 这个类进行操作,需要的朋友可以参考下

    Java 中String StringBuilder 与 StringBuffer详解及用法实例

    主要介绍了Java 中String StringBuilder 与 StringBuffer详解及用法实例的相关资料,需要的朋友可以参考下

    面试题java StringBuffer和StringBuilder类常见操作和用法

    本文将介绍Java StringBuffer和StringBuilder类的常见操作和用法,包括创建、追加、插入、删除、替换、反转等操作。我们还会讨论如何获取长度、获取指定位置的字符,以及将其转换为String对象等常见操作。同时,我们...

    Java StringBuffer & StringBuilder.pdf

    Java中的StringBuffer和StringBuilder类是用于处理字符串的可变对象; 它们与String类类似,但是不同之处在于,StringBuffer和StringBuilder可以修改字符串内容,而String对象是不可变的; StringBuffer和...

    面试的经典程序(String,StringBuffer,list,Connections)

    java基础,字符串的处理,数组,集合容器的处理

    Java String、StringBuffer、StringBuilder(基于源码探索)

    String是Java类对象,Java通过String来创建和操作字符串。 从源码中我们可以看出,String使用byte[]数组进行字符串的存储,且byte[]数组被final关键字修饰。我们知道当final修饰成员变量时,如果成员变量是基本数据...

    StringBuffer 和 StringBuilder 类

      StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议...

    java--面试题大全(附答案

    String和StringBuilder、...StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

    史上最全Java面试题目大集合

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...

    JAVA面试题汇集

    4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串...

    java技术文档 常用类和经典应用

    Java语言基础.pdf Math类的常用方法.pdf String与StringBuffer.pdf Vector类的用法.pdf 迭代器Iterator的用法.pdf 反射机制.pdf 访问路经问题.pdf 基于MVC和RMI的分布.pdf 经典的查询方式.pdf 经典的显示方法.pdf ...

    java 课程 实验

    1. 熟悉Java中的String、StringBuffer、Math、包装器类的使用方法。 2. 使用常用类解决一般性的应用问题。 3. 掌握JavaSE API文档的使用方法。 二、实验内容 1. 编写一个程序,输出一个字符串中的大写英文字母数,...

    java笔试题大汇总

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...

    Java的String类讲解案例代码(String类使用:创建对象、比较、连接、截取、查找和替换、拆分...)StringBuf

    String类使用(创建字符串对象、比较、长度、连接、截取、查找和替换、切割和拆分、和其他类型的转换、格式化、判断、手动入池、其他操作) StringBuffer类 StringBuilder类 String、StringBuffer和StringBuilder的...

    java stringbuffer的用法示例

    主要介绍了java stringbuffer的用法示例,字符串缓冲区,是一个容器(当返回到的是String时而且长度不确定,数据类型不确定时就可以用StringBuffer)其实底层还是数组,只是被封装了,对外提供了方法,初始容量为16个...

    基于java的货物进销管理系统

    掌握字符串类(String, StringBuffer)的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 编写一个Inventory.java完成以下功能(没有学过Java文件处理之前,各位同学可以使用硬编码将数据放进两个Vector变量里...

Global site tag (gtag.js) - Google Analytics