[color=#FF0000]不是说字符串是不可变的吗,string s="abc";s="123"不就是变了吗?[/color]

解决方案 »

  1.   

       在堆中开辟新内存空间存放新值,在栈中变量把原引用地址改变成新内存空间的内存地址。。
    简单地说String类型数据每次重新住址都是开辟一个新的内存空间在中重新空间中的值,原来的数值还在内存中并没有变化通过CG回收。
      

  2.   

    在堆中开辟新内存空间存放新值,在栈中变量把原引用地址改变成新内存空间的内存地址。。
    简单地说String类型数据每次重新赋值都是开辟一个新的内存空间新的数据放在里面,变量的引用重新指向新空间中的的地址,原来的数值还在内存中并没有变化通过CG回收。
    上面打错几个字,不好意思
      

  3.   


    不可变 是说"abc"  "123" 这个字符串不可变当我们定义的时候 这个字符串是定义在字符串变量池中的 他是共享的而s 是一个引用了 字符串"abc"的变量 的对象我们string s="abc"; 是创建了两个对象 一个是字符串"abc" 一个是s
      

  4.   

    你改变的是字符串类实例s的引用,“abc”,“123"的变量在内存中不变
      

  5.   

    * 不变指的是String对象,也就是说String对象的内容不会变String str = "Hello";
    str = "Goodbye";* 在上面的例子中,第二次赋值是把"Goodbye"给了String变量,实际发生的是一个新的字符串"Goodbye"被创建,而且这个新字符串的对象引用(注意引用是新的了,也就是更新了指向)被储存在了str变量中之所以看上去变了只是 错把String变量(str)当成了String对象
      

  6.   

    字符串是不可变没错,string s="abc";的意思是生成一个String对象"abc",并将对象"abc"的值付给了s,s="123"的意思是再生成一个String对象,并将对象"123"的值赋给了s,其中对象 "abc"的值没有变。
      

  7.   

    进来PF3楼lz如果理解不了,不用管这句话也行。记住
    需要不断变化的字符串的时候,用StringBuilder就可以了good luck
      

  8.   

    3L的,一下子st 一下子str,操,他妈的乱写,难怪人家看不懂。
      

  9.   

    其实直接可以理解为  内存中现在 有两个 s 的对象  分别是 "abc"  和  "123"
    但现在  指针指的"123" 所以 输出的数据就变成了"123"
      

  10.   

    final string s="abc";这样就不可以变了
      

  11.   

    LZ还是去理解下堆栈以及String类型吧。