String不能修改

解决方案 »

  1.   

      String,StringBuffer说白了就是个char数组,并提供了大量的方法操作该数组.
      但String的char数组是final类型的,也就是说该数组一旦指向一个对象,就不能再指向另外的对象,并且String也并没有提供直接操作char数组的方法.所以String一旦被实例化就不变了.
      而StringBuffer的char数组不是final类型的,所以该数组可以动态地指向任何其他对象.
        
        以上的说法只是在没有利用反射的前提下,一旦涉及到反射,以上说法就不一定正确了,比如String对象同样可以变化.
      

  2.   

    我的一个哥们说  String,StringBuffer一个是在堆上建的,一个是在栈上建的,是这样子吗??
      

  3.   

    final是修饰变量的,不是修饰对象本身的举例说明:
    final String s = "hello";
    这里final是修饰变量s的,而不是修饰"hello"
    至于说String不能修改,是因为String类是immutable的,就是不能修改的意思,immutable也是一个修饰符final StringBuffer sb = new StringBuffer("hello");
    这里final修饰了sb,sb就不能指向其它对象了
    比如sb = new StringBuffer("hi");这样是不允许的
    但是sb所指向的那个对象本身还是可以改变的
    比如sb.append(" world");是允许的,因为sb并没有变,sb仍然指向的是那个对象,变化的是对象本身
      

  4.   

    final修饰类时,是指不能再被继承,跟能不能更改是两码事,至于说,
    String类为什么内容不能更改,是因为String类没有提供方法给你修改它的内容!
    如果:
    String s="abc";
    s="def";
    实际上新建了一个“def”的String对象,然后让s重新指向它
      

  5.   

    问下:
    string a="a";
    string b="b";
    a=a+b+"c";
    这样a不是被修改了么?
      

  6.   

    string 和 stringbuffer都是堆上建立的