Class Demo{
public void test()
{
   String str = "first";
   change(str);
   System.out.println(str);}
public void change(String str)
{
  str = "second";
}}在同一个类中,为什么test中调用change方法改变str的值后,然后打印出来str的值一直没有被改变啊?如何能调用change方法后让打印出的str在change方法中被改变的值?
注:不要用change方法中return的方法来返回改变后的str。

解决方案 »

  1.   

    str是局部变量,在change时他只是把自己的一个考贝给参数,函数调用完以后,这个临时变量就消失了
      

  2.   


    java有两种传值方式:
    1。基本类型传递,传递的是这个值的副本,也就是说拷贝一个,两个参数是独立的!
    2。引用类型传递,传递的是引用的副本,两个引用值的是同一个内存块,假如你更改这个内存块的值,两个引用的值变!//首先要满足你这需求的话,用一下形式:
    package zhao;public class Parent{ 
    String str = null;
    public static void main(String[] args) 

       Parent p = new Parent();
       p.str = "first"; 
       change(p); 
       System.out.println(p.str);  } 
    public static void change(Parent p1) 

    p1.str = "second"; 


    其次:你的代码!
    Class Demo{ 
    public void test() 

       String str = "first"; //创建一个str对象
       change(str); 
       System.out.println(str); } 
    public void change(String str) //拷贝,并且又分配一个str,内容跟上面的一样,因为String是不变的,每次都生成一个新的,不是单单的拷贝引用!这里很象基本类型的传递方法!

      str = "second"; 
    } } 
      

  3.   

    change(str)//这里的str是个局部变量,你把新直"second"的引用给他,当然不能改变主函数main里的str
    改成:
    Class Demo{
       String str = "first";//把str挪到这
    public void test()
    {
       change(str);
       System.out.println(str);}
    public void change(String str)
    {
      this.str = "second";
      this.str = str;//加上这句,结果就对了
    }}