String类一旦定义就不可改变,即不能在字符串中间添加东东了,而StringBuffer类则可以通过append、insert方法在其中追加字符。不是Stirng a="name",a就不可以再赋值为其他东东了的意思。

解决方案 »

  1.   

    所以说呢,
    String="ddd"+"dfdf";
    这是怎么修改的呢?
    是系统隐藏地先生成一个stringbuffer类的实例,然后使用append方法,再使用toString()方法将其转换为String类型的。
    从而就实现了+号这个功能。
      

  2.   

    我想,应该这样理解吧:
    对于String,虽然又重新附了值,但那仅仅是内容改变了,至于这个String对象,并没有改变.可以假设一个String型的变量str,当它创建之后,那么它所对应的地址和它的长度就不再变化,所以说它是不可改变的和不可再操作的
    对于StringBuffer,它是指一个存贮字符串的位置,这个位置可以改变,就是说,假如原先分配的长度为16,那么对于String类型,最多存贮16个英文字符,但是对于StringBuffer类型来说,当它存贮的长度要超过16个英文字符时,则它可以重新定义长度,这样,它可以存贮多于16的字符
    就这样,是我自己的理解,请大家多多讨论,并欢迎提出不同的观点和意见
      

  3.   

    其实,这些东东都是JAVA在后台处理,所以除非你万不得已才为之!
      

  4.   

    这么多朋友关心这个问题啊!看来技术还是第一位的,虽然我只出了可怜我二十分(我从不关心分数),刚才有位java方面的大学培训部讲师提出了一种说法,请大家参考:string是引用类型不同于基本类型,对象被重新附值后原来的对象并没有改变,因为它是引用对象,只是又产生了一个新的string对象,并且string对象a的引用重新指向那个"require",所以这样写程序员合法的,事实上程序这样做结果也是正确的。至于那个stringbuffer是为处理大型string对象时在不改变指向的同时改变那个string对象,因为如果不这样会造成系统资源的浪费。大家如有不同意见请示下:
      

  5.   

    前天刚好写了个程序测试了一下这两个类的效率,你可以自己看看差别,绝对吓死你:足足相差了几千倍,在操作次数更多时还要离谱。
    test.java:import java.util.*;
    class  test
    {
    public static void main(String[] args) 
    {
    long tmpNow = (new Date()).getTime();
    String st="";int i;
    for (i=0;i<10000; i++ )
    {
    st = st +"s";
    }
    System.out.print("string 用时 :\t");
    System.out.println( (new Date() ).getTime()-tmpNow ) ; StringBuffer stb= new StringBuffer(); tmpNow = (new Date()).getTime();
    for (i=0;i<10000; i++ )
    {
    stb.append("s");
    }
    System.out.print("StringBuffer 用时:\t");
    System.out.println( (new Date() ).getTime()-tmpNow ) ;
    }
    }
      

  6.   

    不要在java领域里提到指针,因为java是没有指针的。上述的问题你可以
    从重裁的广义去理解