String 到底是引用传递还是值传递
Public class Test1 { 
    Public static void changeStr(String str){
        str="welcome";
    }
    Public static void main(String[] args) { 
        String str="1234";
        changeStr(str);
        System.out.println(str);
    }
}为什么输出是1234,是因为成员变量的原因?

解决方案 »

  1.   

    Java里不管什么类都是值传递。
      

  2.   

    Java参数传递只有 “传值”只不过当其为对象时,是复制了实参所引用的这个值(有点像地址的意思),实参本身并没有被传递进来。所以当你修改 形参 str,对外面实参没有任何影响。
      

  3.   

    值传递第一步,String str 地址指向"1234"
    第二部:传到方法changeStr中时,形参str指向第一步str的地址
    第三步:改变了形参的地址指向"welcome"
    第四步:虽然第三版改变了形参的地址但没有改变第一步的str的地址所以输出还是“1234”
      

  4.   

    值传递。首先要明白每个方法中的str的作用域,mian方法中的str只在main方法中有效,是局部变量。changeStr方法中的str只在本方法中有效,
    虽然将str的引用值传递给方法changeStr的参数str , 但是改变changeStr方法中的str的值,也不影响main方法中的str的值。
      

  5.   


    StringBuffer 就打印 welcome了区别在于changeStr中如果是String(不可变的)的话会指向新的地址,而StringBuffer(内容可变的)就是该原始地址的内容
      

  6.   


    http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html
    虽然有点长,但仔细看下吧。 详细讲解了StringBuffer作为参数的事。
      

  7.   

    耐心看完,就懂了
    http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html