就是书上说对象的引用共享一个地址
比如
String s1 ="hello";
String s2 =s1;
现在s2,s1共享一个地址
也就是说对s2的修改会影响s1
但是事实不是这样.这是为什么?
请教!谢谢

解决方案 »

  1.   

    因为
    String s1 ="hello"; 
    字符串"hello"在常量池中
    s1,s2只是指向他的变量...当你修改s2时
    比如
    s2="asdasd"
    此时不过是在常量池中又产生了一个"asdasd"字符串常量..而s1仍然指向的是"hello".字符串情况比较特殊...你做试验用其它对象
      

  2.   

    String被设计成为了不可变(immutable)类,所有比较特殊,你如果要测试书上说的,建议用StringBuffer,如下:
    StringBuffer sb1 = new StringBuffer("hello");
    StringBuffer sb2 = sb1;
    sb1.append(" eric!");

    System.out.println(sb1);
    System.out.println(sb2);
      

  3.   

    String类型的变量均为常量,不能被修改。
    1楼正解。
      

  4.   

    当你s2修改的时候 s2已经指向另外一个对象了 而s1还是指向原来的"hello"
      

  5.   

    1.String s1 ="hello"; 
    在Stack空间里分配一个s1,如果data区内不存在"hello"字符串,则在data区创建"hello"字符串,并把s1指向data区内的"hello".2.String s2 =s1; 
    在Stack空间里分配一个s2,由于data区内存在"hello"字符串,所以就只需把s2指向data区内的"hello"即可.3.s1重新赋值: s1="baby"; 首先会在data区域内查找是否有"baby",如果data区内不存在"baby",则在data区创建"baby",并修改s1指向为data区内的"baby". 在重新赋值的过程中并没有修改s2,所以s2的值没有变化~
      

  6.   

    (1)String s1 ="hello"; 
    首先查找堆里有没有‘“hello”这个值,有的话就让s1指向它,没有的话就直接建立一个再让s1指向它。
    (2)String s2 =s1;
    再在栈里定义一个s2,让s2也指向"hello" ;
    现在s2,s1同指向一个"hello";
    (3)当修改s1或s2中的某一个时,比如:s1="world“,
    这时,s1就会指向"world”,而s2没变,还是指向"hello“