java中形参的值传递

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。

原文地址:https://www.cnblogs.com/sunzhenxing19860608/p/1957722.html