书上说:
由于String类表示不变字符串,String类对字符串进行修改操作时,不能直接对原有字符串的内容进行修改,而是通过生成String类对象的一个拷贝进行的.
但是看下面的代码:
public class modifyStr
{
  public static void main(String[] args)
  {
  String s1 = "abcd"; 
  System.out.println("s1=" + s1);  s1 = "dcbaaaaaa";
  System.out.println("s1=" + s1);
  }
}执行结果是:
s1=abcd
s1=dcbaaaaaa不是说String s1是表示不变字符串吗?怎么可以改变呀?

解决方案 »

  1.   

    String对象本身并没有改变,在内存中依然存在,
    但s1引用已经不在指向原String了。
    所以改变
      

  2.   

    String对象本身并没有改变,在内存中依然存在,
    但s1引用已经不在指向原String了。
    所以改变
    -----------------------------------------------------
    那我还能找到原String s1吗?
      

  3.   

    引用是可以变的阿
    你调用方法比如s1.subString(1,1)如果不重新引用结果还是以前的
      

  4.   

    那我还能找到原String s1么?
     如果原来的实例不再被引用 那么原来的实力将被内存回收了 内存的回收时不定时的 所以你摘不到原来的实例了 这就是java的内存回收机制