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。