Java程序设计语言总是采用“按值调用”
,方法得到的是所有参数值的一个拷贝,方法不能修改传递按它的任何参数变量内容。
如:
int a = 10;
harry.raiseSalary(a);
这里是的a经过方法后,值仍然是10。
方法参数有两种类型:
1、基本数据类型
2、对象引用
基本数据类型显然是不可能可以改变的。
对象引用作为参数,内部的对象的状态是可以发生改变的。
如图:
上方式harry对象传参前,传参后是下方,可以看到他们引用同一个对象,因此,对拷贝进行修改,那么对象状态也会发生变化。
这里有个“特例”,可以证明书中观点,JAVA是按值传递。
public static void swap(Student s1,Student s2){
Student temp;
temp = s1;
s1 = s2;
s2 = temp;
return;
}
在这个方法中的s1,s2是不会发生交换的,发生了如图的过程。
在方法中,只有拷贝发生了交换,但是有上文所述的情况,在方法的作用域结束时,拷贝会消失,拷贝进行交换是没有意义的。