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");
打个比方就是原本两根线都栓着同一个宠物,而后来一根线栓向另一个宠物去了,(虽然这根线很快就消失了,没有任何意义,局部变量嘛!),
但原先的线栓的宠物是没有任何改变的!
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");
打个比方就是原本两根线都栓着同一个宠物,而后来一根线栓向另一个宠物去了,(虽然这根线很快就消失了,没有任何意义,局部变量嘛!),
但原先的线栓的宠物是没有任何改变的!
相关文章推荐
- 解决java传递参数是String类型,pgsql的numeric字段接收报错问题
- java中参数传递的问题
- Java中参数传递问题总结
- Java-String类型的参数传递问题
- Java中函数参数的值传递与引用传递问题
- Java-String类型的参数传递问题 推荐
- Java-String类型的参数传递问题
- Java参数传递问题
- java参数传递问题
- java调用linux命令传递参数问题
- java中关于参数传递问题的解释(传…
- java学习日记_8: Java中的参数传递问题
- JNA参数传递问题,Java数组
- java中参数的传递问题
- 参数传递中的编码问题(Java)
- Java中的参数传递问题
- JAVA中涉及函数参数的传递问题。
- jni java c++ 参数传递问题解决
- java参数传递问题
- java参数传递。传递值还是引用问题