今天又被困惑了。把一个String传进一个函数去修改。却发现在函数外并没有修改成功。String s = "abcd";
t2(s);
System.out.println(s);在t2中改变参数的值
public static void t2(String ss){
    ss = ss+ "xxx";
}
打印出来的是 abcd请问传参数到底是按值拷贝一份还是相当于C++的引用那样传?

解决方案 »

  1.   

    这是一个误区,String是一个不可变类,就意思着String的对象是不可以改变的,你对传过去的对象进行更改就会创建一个新的东西,所以外边的没有改变,java传primitive即普通类型是按值传递,传对象则是引用,而String是个类引用对象,所以传的是参数,但又因为String是不可以变对象,所以外边的值没有可改,
      

  2.   

    修改了一下:
    class  haha
    {
    public static void main(String[] args) 
    {
    String s = "abcd";
    System.out.println(t2(s));
    }
    public static String t2(String ss){
    ss = ss + "xxx";
    return ss;
    }
    }
    你修改的事局部成员变量,而且有没有把修改后的字符串放回给源字符串变量。
      

  3.   

    LZ对C++又了解多少?
    举个C++例子voud main () {
        char* a = "test";
        change(a);
        cout<<a<<endl;
    }void change(char* a) {
        a = "123"; //改变函数内部指针的指向不影响外部的指针指向
                     //只有改变指针指向的内容,函数外部的指针指向的内容才会有变化
    }
    如果LZ能理解这个,就能理解java了,不再多解释
      

  4.   

    JAVA里面的引用有点C++指针的味道