通过append方法改变str1的值,然而结果不是"0test"。
大家能帮忙解释下原因吗?public class Test0 {
public static void main(String[] args) {
String str="test";
str=str+"0";
System.out.println("当前方法拼接结果:"+str);


String str1="test";
append(str1);
System.out.println("append方法拼接结果:"+str1);
}

public static void append(String str){
str="0"+str;
}
}

解决方案 »

  1.   

    String不可变,每次操作都是返回新的对象,不接受是没用的
      

  2.   

    调用append方法,0+str生出新的内存空间,str指向新的内存地址,不用接收吧?
      

  3.   

    这不是传址所以 上边的str 不会改变   在内存中 方法里的 str 和 上边的str  不在同一个内存空间   你可以 retrun "0"+str;
      

  4.   

    string 对象表示的字符串是改变不了的。
      

  5.   


    public class Test1 { public static void main(String[] args) {
            String str="test";
            String a=str;//第一个String的地址
            str=str+"0";
            String b=str;//第二个String的地址
            System.out.println("当前方法拼接结果:"+str);//输出结果:test0
            System.out.println("两个字符串地址是否一样:"+(a==b));//输出结果:false,不一样,说明指向常量池的地址不同
             
             
            String str1="test";
            append(str1);
            System.out.println("append方法拼接结果:"+str1);//输出结果:test
        }
         
        public static void append(String str){//此处str不是对象,只是字面量(引用的常量池中的),在方法外面不会保留方法里的改变
            str="0"+str;
            System.out.println("方法里面:"+str);//输出结果:test0
        }




    }
      

  6.   

    参数传递相当于局部变量赋值,局部变量赋值,局部变量赋值!        String str1="test"; // 假设str1指向内存地址为ox0001
            {
             String str = str1; // str指向内存地址ox0001
             str="0"+str;  // 生成新的字符串"0test",地址为ox0002,str指向内存地址ox0002
            }
            System.out.println(str1); //输出ox0001的内容"test"
      

  7.   

    String 特殊的引用类型
    可以使用stringbuffer做参数传递 这个是引用类型  不特殊
    或者
    public static void changeString(String s) throws  Exception{
            String re = s;
            s = "12345"; //将s改成新的字符串
            Field valueFieldOfString = String.class.getDeclaredField("value");
            valueFieldOfString.setAccessible(true);
            valueFieldOfString.set(re,s.toCharArray());
        }
      

  8.   

    同学你是从C转过来的么- -,以为直接用指针指向str1么
      

  9.   

    String 点进源码进去你会发现一个final
      

  10.   

    形式参数(str)  作用于方法内部,您并没有对str1进行操作。
    在java中方法的所用参数都是“传值”的,也就是说,方法中参数变量的值是调用指定值得拷贝。相当于生活中的“原件”(str1)和“复印件”(str)。方法对复印件进行操作,并不影响原件。
      

  11.   

    老哥,你return值呢?
      

  12.   

    str不变对象