重新生成了对象
 
 s是个引用(相当指针,可以指向另外一个Sting对象),当然可以变; 
 s所引用的对象一旦生成,就不能改了

解决方案 »

  1.   

    每一个 s = "..." 这样的语句,表示在内存里又 new 了一个 String对象,s 则指向新new的这个String对象,而并不是说s原来所指的字符串对象改变了内容,明白?
      

  2.   

    s是引用,就象一个指针,当s=“gaga”时,就是把这个字符串的地址赋给s而已,道理就象上面“nihao”一样,输出的是s所指向的地址里面的值。所以,指向是可以改变的。
      

  3.   

    对了,如果不停的给他赋值,比如s="gaga";
    在内存里又 new 了一个 String对象,那如果赋值多了的话会不会崩溃阿??
    还有怎么访问s一开始的那个值,就是没有改变的那个值??
      

  4.   

    不会的;
    你是没有办法去做访问的,因为这里的s是一个reference,一开始的那个值会java的垃圾回收机制回收,至少我是没有办法去获得那个值。
      

  5.   

    java  的垃圾回收机制很厉害的 哈哈
      

  6.   

    两个问题。。首先。。对于String s=new String("hello");  ///引用,
    我们直接就这样:String s="hello"; 便可。这才是正确的编程风格。
    其次。没有哪本书说过String是不可修改的。需要编程不可修改的你只需要写成这样
    final String aaa="china";
    这样你再尝试修改在编译的时候便会报这个错:
    cannot assign a value to final variable aaa
    自己试试