String s = new String("s");
    String s1 = s;
  这样做就是把s的引用赋值给了s1吧,应该修改s1,s也会变,但是我实验一下没有s改变,求解释一下,谢谢!

解决方案 »

  1.   

    把s的引用赋值给了s1,应该修改s1,s不会变
      

  2.   

    我不知道你是咋修改的  
    java中的String的值是不能修改的   如果要修改的话用StringBuffer或StringBuilder   推荐使用StringBuilder假如:String S="123";
    s = "456";这其实是两个对象
    "123"会一直放在String缓冲区中,如果以后没用到的话 ,他就会成为垃圾,不会被回收的 ;
      

  3.   

    String对象一旦被创建就无法被修改,修改s1只是修改它的引用,例如将它的引用指向“ss”,“s”对象是不会被修改的,所以s指向的仍然是“s”.
      

  4.   

    貌似搞懂了,谢谢,我想问一下,数组为什么可以改变?
             int[] s = new int[6];
    for(int i=0;i<s.length;i++){
    s[i]=i+1;
    System.out.println(s[i]);
    }
            int[] s1 = s;
            for(int i=0;i<s1.length;i++){
             //System.out.println(s[i]);
             ++s1[i];
             System.out.println(s[i]);
            }
    这样也是把s的引用赋值给了s1,修改s1,s也变化了
      

  5.   

    String s = "s";
    String s1 = s;   
    System.out.println(s==s1);
    s1+="abc";
    System.out.println(s==s1);
    System.out.println(s);
    结果:
    true
    false
    s
    s1 = s; s的引用赋值给了s1,那么  s、s1指向了同一个字符串对象。所以第一个打印出了true
    s1+="abc"; 这里修改了s1的值,按理说s、s1指向了同一个对象,打印s的值应该是也是sabc才对。可是在java中使用+串联字符串会产生一个新的字符串对象,所以此时内存中有两个字符串对象,一个 "s" ,一个 "sabc"。此时s1指向的正是第二个对象,s则仍然指向那个"s"字符串对象。
      

  6.   

    因为字符串赋值,传递的是引用(即地址),也就是说,s给s1赋值,是让s1指向s所在的地址,因此s1改变不会引起s的改变。希望对你有帮助!
      

  7.   

    你好,我用String数组弄一个
    String[] s = {"a","b","c","d"};
            for(int i=0;i<s.length;i++){
             System.out.println(s[i]);
            }
            String[] s1 = s;
            for(int i=0;i<s.length;i++){
             s1[i]+="f";
             System.out.println(s[i]);
            }
    结果输入a
    b
    c
    d
    af
    bf
    cf
    df
    s1数组改变,s也改变了
      

  8.   

    这个跟String没有关系了,数组是引用传递的。你这里s1和s指向的是同一个对象。
    你这两个例子没有可比性