java中形参的传递方式只有一种,那就是值传递,不管参数的类型是基本类型还是类类型。
当参数类型是基本类型时,形参获取实参一个副本并传递给方法。如下程序所示:
public static void changeInt(int a){
a=100;
}
public static void main(String[] args){
int a=10;
changeInt(a);
System.out.println(a);
}
输出结果当然是10。
当参数类型是类类型时,形参获取实参地址(实参实际上就是存储的地址,也就是说它的值就是地址)的一个副本并传递给方法,如下程序所示:
public static void main(String[] args){
Name n=new Name("zhenxing","sun");
changeName(n);
System.out.println(n);
}
public static void changeName(Name n){
n=new Name("yuanyuan","sun");
//n.firstName="yuanyuan";
}
Name类的定义
class Name {
public String firstName;
public String lastName;
public Name(String firstName,String lastName){
this.firstName=firstName;
this.lastName=lastName;
}
public String toString(){
return firstName+"-"+lastName;
}
}
程序的输出是zhenxing-sun,下图分析了程序的执行过程。

由图中可以看到虽然changeName方法中的n变量指向了新的Name实例,但是main方法中的n变量指向的对象并没有改变,所以最终的输出时zhenxing-sun。
浙公网安备 33010602011771号