String类提供了数值不可改变的字符串这句话不是很理解.String str = new String("ABC");str="ddd";
这样不就改变了str的值了么?程序也不报错,为什么说它提供了不可改变的字符串呢.谢谢.

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【whh743】截止到2008-06-28 22:28:06的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:5                  
    结贴数:0                  结贴分:0                  
    未结数:1                  未结分:5                  
    结贴率:0.00  %            结分率:0.00  %            
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    那是重新生成了一个新的字符串对象,而不是修改了。String 在内存一旦生成,就不会被修改,任何变动都会重新生成一个对象。
      

  3.   

    那原来的string对象会无用掉是不是?就是等着垃圾回收是不是
      

  4.   

    竹子说的对,建议楼主参考flyweight模式
      

  5.   

    小竹笋?我考,我以为java来了个新牛人,汗啊
      

  6.   

    String 不能初修改,而可以通过StringBuffer去改变String
      

  7.   

    不是改变,而是又重新创建了一个String。原来的被隐藏
      

  8.   

    str="ddd"; 这句是创建了个“ddd”字符串对象,然后再把这个对象的引用赋值给了str。
    而原来那个“ABC”对象并没有改变,只是str不在指向这个对象
      

  9.   

    你改的是 str引用的指向 
      

  10.   

    指不过创建了一个ddd,再把str引向ddd而已,ABC并没有被改变啊,只是你看不到了
      

  11.   

    引用改变了,转向了ddd这个字符串~
      

  12.   

    String 和StringBuffer最大的区别就是StringBuffer的字符串可以改变
      

  13.   


    str是一个引用
    str="ddd";//这个引用指向新对象
    原对象被垃圾回收
      

  14.   

    str是一个引用 
    str="ddd";//这个引用指向新对象 
    原对象被垃圾回收
      

  15.   

    str对象引用的内存地址指向新的"ddd"所在的地址
    原对象"ABC"所占用内存空间仍然存在并不是"ABC"变了,而是str指向的内存地址便成了新的"ddd"所在的地址
      

  16.   

    String类提供了数值不可改变的字符串 意思是String类是被定义为final的类
      

  17.   

    String 的不可变,是说它不可被操作改变
    比如String str="abc";
    str="cde";
    str=str+"fgh";
    这些并没有改边"abc"这个字符串,它还存在于内存中(并且还生成了"cde","fgh","cdefgh"三个字符串对象),只有在适当时候(这个时间是不可预测的)被gc发现并回收而StringBuffer sbf=new StringBuffer("abc");对sbf进行操作:sbf.append("def");之后,内容为"abc"的这个StringBuffer就不存在于内存了,只有一个内容为"abcdef"的StringBuffer存在于内存