Java中参数传递的问题

 

Java code

 

public class Test2

{

    public static void changeStr(String str){

        str = "welcome";

    }

    public static void main(String args[]){

        String str = "1234";

        changeStr(str);

        System.out.println(str);

    }

}

 


这段代码的输出结果是:1234.可是我不明白,为什么调用了changeStr这个方法后,没有改变?本人小菜一个,大家多看看.谢谢

 

回答:

1.跟静态没有一点关系,下面结果一样!

public class Test2

{

    public void changeStr(String str){

        str = "welcome";

    }

    public static void main(String args[]){

        String str = "1234";

        new Test2().changeStr(str);

        System.out.println(str);

    }

}

2.String的不可改变和StringBuffer也没有一点关系,下面结果还是一样!

 

public class Test2 {

       public  void changeStr(StringBuffer str){

        str = new StringBuffer("welcome");

    }

    public static void main(String args[]){

    StringBuffer str = new StringBuffer("1234");

        new Test2().changeStr(str);

        System.out.println(str);

    }

 

}

 

3.只是JAVA中传参的小问题,用下面这个例子分析:

package org.leno;

 

public class Student {

private String username;

 

public Student(String username) {

       super();

       this.username = username;

}

 

public String getUsername() {

       return username;

}

 

public void setUsername(String username) {

       this.username = username;

}

}

 

public class Test2 {

       public  void changeStr(Student str2){

        str2 = new Student("welcome");

    }

    public static void main(String args[]){

    Student str = new Student("1234");

        new Test2().changeStr(str);

        System.out.println(str.getUsername());

    }

}

虽然传参的时候strstr2指向同一个学生对象,但在方法里面我们将str2变量指向了其它对象,而这时候的str

还是指向原来的学生对象,所以打印出来的依然是原来学生的名字。浅显点说就是和下面的情况差不多:

Student str = new Student("1234");

Student str2 = str;

str2 = new Student("welcome");

打个比方就是原本两根线都栓着同一个宠物,而后来一根线栓向另一个宠物去了,(虽然这根线很快就消失了,没有任何意义,局部变量嘛!),

但原先的线栓的宠物是没有任何改变的!

你可能感兴趣的:(Java中参数传递的问题)