Java方法调用时的参数传递都是值传递
基本类型的参数值传递
void methodA(){
int a=5;
methodB(i);
}
void methodB(int i ){ //创建一个栈帧,创建一个本地变量i,并在栈帧中开辟4个字节空间,将传递来的数值5存储到这个空间中。
i=i+3;
}
在上例中,A调用B方法后,将int型变量a的值,传递给方法B的参数i,无论变量i怎么变,都只是变量i自己的事儿,跟变量a无关了,变量a的值永远是5。
引用类型变量的参数值传递
class Person{
String name;
void setName(String name){
this.name = name;
}
}
class Test{
void methodA(){
Person p = new Person(); // 变量p中存储的是new Person()创建出的对象的存储地址,即引用,占4个字节
methodB(p);
}
void methodB(Person person ){ // 创建了一个栈帧,并创建一个变量person,为其开辟4个字节的存储空间,将变量p的值,即对象的存储地址存放到这个变量person的空间中去。
person.setName("jack");
}
}
上例中,A调用B时,将变量p的值即对象的存储地址传递给了B方法中的变量person,无论方法B中person变量的值怎么变,A中变量p的值永远都不会变,永远存储的是 new Person()创建出来的对象的存储地址。