我想问下  有了StringBuffer  还要String干嘛  既生亮和生喻
   

解决方案 »

  1.   

    Good question,but no answer!
      

  2.   

    String 操作后都是产生一个新的字符串对象,而stringBuffer操作的始终是原对象~当你知道字符数据要改变的时候你就可以使用StringBuffer~举个例子说明:StringBuffer sbf = new StringBuffer();  
    for(int i=0;i<100;i++)
    {
    sbf.append(i);
    }//此段代码只创建了一个StringBuffer对象String str = new String();  
    for(int i=0;i<100;i++)
    {
    str = str + i;
    }//此段代码创建了101个String对象。
    效率差别明显
      

  3.   

    String 是 final 不可继承,不可更给。
    StringBuffer 内容可以修改。
    请问 既生瑜何生亮 从何说起???
      

  4.   


    要比也是比 StringBuilder 和 StringStringBuffer是线程安全的
    StringBuilder类的设计并不是用来代替String的,而是用来设计一种可变String的,而很多情况下,我们关注的并不是字符串可变还是不可变,而是专注于此字符串如何操作。所以我们基本上通用的方法是,用StringBuilder来生成我们的字符串,然后将他toString以后,来操作。
      

  5.   


    你怎么拿StringBuilder 和 String这两个相比,根本就不是一个东西,有可比性吗???
    StringBuilder和StringBuffer是一类的,但是StringBuffer是线程安全的,而且是老版本,没有线程安全问题的话不推荐使用StringBuffer,用StringBuilder
      

  6.   

    存在即合理,各有侧重点
    举个例子
    你定义一个全局的字符串常量,你若用StringBuffer试一下,别人在引用你这个常量之后把它的内容给改了,那再有人引用你这个常量的时候不是面目全非啊(注意对象型的常量的指向是不可改的,但是其对象的内容还是可以改的,你可以定义一个常量的HashMap,完全可以往这个HashMap put东西的),所以这个时候必须要用String
    但是如果在for循环里面,循环的去拼接一个字符串,这个时候用StringBuffer就要好多了
      

  7.   

    String是固定长度的字符串,如果要发生变化必须重新生成新的实例;
    String 字符串常量
    StringBuffer 字符串变量(线程安全)
    StringBuilder 字符串变量(非线程安全)
    简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 
    而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
    String S1 = “This is only a” + “ simple” + “ test”;
    StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
    你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
    String S1 = “This is only a” + “ simple” + “test”; 其实就是:
    String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
    String S2 = “This is only a”;
    String S3 = “ simple”;
    String S4 = “ test”;
    String S1 = S2 +S3 + S4;
    这时候 JVM 会规规矩矩的按照原来的方式去做
    在大部分情况下 StringBuffer > String
    StringBuffer
    Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
    可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
    StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
    例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
    java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
      

  8.   

    用起来不方便。如果不是很多的字符串的连接lz想想是  "2012"+"05"方便还是 str.append("2012");
          str.append("05");
    方便
      

  9.   

    我认为弄出String 是方便理解 节省代码量
      

  10.   

    我感觉。String类和StringBuffer类各有有格的有点哑不能那么比亚!!!
      

  11.   

    我回答下8# :  你的回答最有道了,效果可能就在你说的这里吧  其实StringBuffer有String所有的优点,也有String没有的优点,也可以说是缺点 比如8#说的
      

  12.   

    创建很多不变字符串用String
    字符串经常改变的话 如果只有一个线程,用StringBuilder,如果是多线程,用StringBuffer
      

  13.   

    去问开发Java这两个类的作者吧
      

  14.   

    StringBuffer是可以叠加得,而String是不可以叠加的。
    楼主可以翻下JDK英文或者中文的文档,里面有这部分的介绍。
    String是固定长度的字符串,如果要发生变化必须重新生成新的实例;
    String 字符串常量
    StringBuffer 字符串变量(线程安全)
    StringBuilder 字符串变量(非线程安全)