你的str是一个reference,指向了不同的对象stringbuffer就是在同一个对象上修改

解决方案 »

  1.   

    改变啦后面str="MyDelphi"
    是赋值给str,所以改变啦最初String str=new String("Myjava");可以说是初始化吧
      

  2.   

    所谓的string类创建后不可以改变,并不是指它的值不可以改变
    而是说一旦定义了一个string变量之后,那么会在内存中为这个变量留出一个位置,那么在内存中这个值是不可以改变的,一旦你改变了string变量的值,虽说表面上还是这个变量,但其实在内存中已经又生成了另外一个对象
    也就是说string对像一旦发生改变,就会生成一个新的对象
      

  3.   

    它指的修改是对对象而言的,所以你并没有改变String对象的值,而只是改变了句柄所指的对象。也就是说现在内存中出现了两个String对象,"Myjava"和"Mydelphi"
      

  4.   

    str = "MyDelphi",
    str指向另一个Stringreference  Object
    str   --> "Myjava"
     |
     |    --> "MyDelphi"
      

  5.   

    实际上有两个String对象,内容分别是"Myjava"和"MyDelphi"
    str="MyDelphi";
    创建一个新的String Object,再将str参数指向"MyDelphi"