String 与 StringBuffer有什么区别。String是常量类,建立有不能修改,是指怎么样不能修改的?StringBuffer可以改变(增长或修改),是怎么修改的?[**现在的发贴,写贴的时候,怎么总是会失去焦点,总要鼠标点一下发贴的文本框?]

解决方案 »

  1.   

    比如说两个字符串相加的时候。"bei","jing" String是把"bei"和"jing"分别复制到一个新的内存地址中。而StringBuffer是直接把"jing"加在"bei"后面就可以了就是这样的。
      

  2.   

    String str1 = "aa" ;
    str1 = "bb";
    str1 :是一个指针,指向一内存地址,里面存放着"aa". 
      String 不能改变是指这里的"aa"不能改变. 但 str1 是一个指针,他可以指向的别的地方.
      str1 = "bb"; 是将str1 指向 一个存放着"bb"的内存.当然这里的"bb"也不能改变.
      此时,str1 指向"bb",读出来当然也是"bb";但"aa"与"bb"都存在于内存.
    StringBuffer 是指针不变,改变内存中的内容.
    String 是不改变内存中的内容,通过改变指针来达到改变变量.java 没有指针是骗人的,到处都是指针好不好...
      

  3.   

    StringBuffer的效率更高  
    更加节省资源
      

  4.   

    我的理解,StringBuffer,就像链表一样,所以才可以扩展其空间。这只是一个比喻。
      

  5.   

    我们在链表里面,对象的联结和扩展,就是通过尾部的指针指向一个新的区域。所以,stringBuffer,在自己空间不够的时候,就自动的扩充自己的空间。
    但是string就不能这样了。因为,在创建一个string对象的时候,其空间就已经固定了,就是字符串的大小。所以就不能再在需要的时候区扩建其大小。所以,在做字符串的其他的相关操作的时候,系统就只能做新的创建一个字符串对象了。
      

  6.   

    java不是指针..只是全部是引用而已...
    String的定义是public final class
    两个string相加等于是操作了三个内存对象
    StringBuffer则是在内存中申请了一块空间以后,利用缓存原理里处理数据
      

  7.   

    String a = "abc"相当于C中a->"abc"这一块地址,当你为a赋值,a='uio'a的地址变为"uio"的地址,而原先保存着"abc"的内容不变,说白了a只是字符串的引用
      

  8.   

    我的理解是String的定义是内存的常量,而StringBuffer是内存中的一个缓冲区,可以更改内容的地方,在jdk1.5中,和StringBuilder功能类似