各位学长学姐好,本人是JAVA的初学者,对于String和StringBuffer不是很清楚,不知道它们之间有什么区别?请各位结合实例说明一下好吗?拥抱你们!

解决方案 »

  1.   

    http://www.javaeye.com/topic/142364
      

  2.   

    string是死的, stringBuffer是活的
    例子:
    string a="132123wdasd";
    StringBuffer sb=new StringBuffer();
    sb.append("132");
    //do something...
    sb.append(a);
    最后sb就是132132123wdasd
      

  3.   

    1)String 类表示字符串。 在 Java 程序中所有的字符串常量,如 "abc",都被实现为这个类的实例。 因为字符串对象是不可变的,所以它们可以被共享。 例如: 
         String str = "abc";
    等价于: 
         char data[] = {'a', 'b', 'c'};
         String str = new String(data);
     
    下面是一些关于如何使用字符串的更多的示例: 
         System.out.println("abc");
         String cde = "cde";
         System.out.println("abc" + cde);
         String c = "abc".substring(2,3);
         String d = cde.substring(1, 2);
    字符串是常量;他们的值在生成后不能改变。
    2)字符串缓冲区实现可变字符序列。 
    字符串缓冲区可以被多个线程安全地使用。 这些方法在需要的时侯可以同步执行,因而任一特定实例的所有操作就好象是以串行的次序发生 。 
    字符串缓冲区被编译器用来实现连接两个字符串的运算符 +。 例如,代码: 
        x = "a" + 4 + "c"
     被编译成等价的: 
        x = new StringBuffer().append("a").append(4).append("c")
                               .toString()
      

  4.   

       一句话string一旦赋值不可改变,stringbuffer可以的。
      

  5.   

    上面说的是啊!!!string是死的  但stringbuffer可以new对象啊
      

  6.   

    string 和 stringbuffer可以new对象啊但string 的值不可以改变   而 stringbuffer 的值 可以改变
      

  7.   

    String 的长度是固定的  stringbuffer 的长度是可变的 
      

  8.   

    仔细看看API中的方法就清楚了StringBuffer中的方法,主要侧重于:对一个字符串的操作 
    String中的方法,主要侧重于:字符串的属性、逻辑举个简单的例子
    String和StringBuffer都可以得到一个字符串的子字符串
    String需要再声明一个String类型的变量;
    而StringBuffer不需要声明新的变量,直接对这个字符串进行操作如果要对一个字符串反复操作,建议用StringBuffer
      

  9.   

    自己整理的,可以参考一下:
    http://coderdream.javaeye.com/blog/845822
      

  10.   

    ava.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。
      

  11.   

    建议 百度、、google、、、
      

  12.   

    String对象一旦生成长度就不可变,StringBuffer对象的长度是可变的
      

  13.   

    String 类型的字符不能够被追加(在后面拼接字符),而StringBuffer 类型却可以通过方法追加字符。