请问大吓们:String 与 StringBuffer 有什么区别??!!
他们的基本理念或使用方面,或还有其它的什么,反正有什么区别,请指教,谢谢!!!

解决方案 »

  1.   

    StingBuffer是一个可变的字符串,它可以被更改。同时StringBuffer是Thread safe的, 你可以放心的使用.因为String被设计成一种安全的字符串, 避免了C/C++中的尴尬。因此在内部操作的时候会频繁的进行对象的交换, 因此它的效率不如StringBuffer。 如果需要频繁的进行字符串的增删操作的话最好用StringBuffer。 比如拼SQL文, 写共函。 另: 编绎器对String的+操作进行了一定的优化。 
    x = "a" + 4 + "c"
    会被编绎成
    x = new StringBuffer().append("a").append(4).append("c").toString()
    但:
    x = “a”;
    x = x + 4;
    x = x + “c”;
    则不会被优化。 可以看出如果在一个表达式里面进行String的多次+操作会被优化, 而多个表达式的+操作不会被优化。
    摘自:《Java API Using, Tips And Performance Tuning》
      

  2.   

    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对象。
      

  3.   

    精简的一句:String是不可修改的BufferString是可修改的
      

  4.   

    是啊,一楼二楼讲的好插不上话呢反正在可能出现循环的地方尽量由StringBuffer就是
      

  5.   

    String定义的是对象,而StringBuffer是字符串缓冲池  剩下的以上俩位大侠已经回答的很好了
      

  6.   

    简单的说;
    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
      

  7.   

    String 类提供了许多字符串处理的功能,不过,一旦创建了String对象,则它的内容就永远不会改变,
    StringBuffer类创建和动态操作字符串.每个StringBuffer对象都能够存储由其容量指定的字符,如果超出了对象的容量,则容量就会自动地扩大,以容纳多出来的字符.String类对象是常量字符串,而StringBuffer对象是可修改的字符串.如果程序频繁地执行字符串连接操作,或其他的字符串修改操作,则使用StringBuffer类来实现这些修改操作,可以提高效率.如果该字符串不会变更,则总是使用String对象,将提高性能.