您的位置:首页 > 编程语言 > Java开发

Java中参数传递的问题

2008-09-15 20:16 567 查看
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.只是J***A中传参的小问题,用下面这个例子分析:
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());
}
}
虽然传参的时候str和str2指向同一个学生对象,但在方法里面我们将str2变量指向了其它对象,而这时候的str
还是指向原来的学生对象,所以打印出来的依然是原来学生的名字。浅显点说就是和下面的情况差不多:
Student str = new Student("1234");
Student str2 = str;
str2 = new Student("welcome");
打个比方就是原本两根线都栓着同一个宠物,而后来一根线栓向另一个宠物去了,(虽然这根线很快就消失了,没有任何意义,局部变量嘛!),
但原先的线栓的宠物是没有任何改变的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: