ps:值传递机制是面向对象上的重点和难点,这篇文章的将会对值传递机制做一个说明
文章目录
形参:方法定义时的参数;
实参:方法调用时实际传给形参的参数值。
值传递机制:
形参是基本数据类型,实参赋给形参变量的是实参真实存储的“数据值”;
看例子
public class ValuePassed {
public static void main(String[] args) {
int m = 10;
int n = 20;
swap(m,n);//调用方法,交换m和n的值
System.out.println("m="+m+",n="+n);//m=10,n=20
}
public static void swap(int m ,int n){
int temp = m;
m = n;
n = temp;
}
}
说明:在main()里声明了m,n,在swap()里定义了两个同名形参m’和n’;将属性m,n传递给形参m’,n’,关键处就是这里,swap(m’,n’),是将m和n的值拷贝一份给形参m’,n’,不论形参如何改变不会影响到其原本的属性m和n;当swap(m’,n’)运行结束后,整个被回收机制处理,因此最终输出的结果是:m=10;n=20。
内存解析:
形参是引用数据类型,实参赋给形参变量的是实参存储的“地址值”。
class Value_propagation {
public static void main(String[] args) {
Data data=new Data();
data.m=10;
data.n=20;
Value_propagation test=new Value_propagation();
test.swap(data);
System.out.println("m="+data.m+",n="+data.n);//m=20,n=10;
}
public void swap(Data data) {
int temp=data.m;
data.m=data.n;
data.n=temp;
}
}
class Data{
int m;
int n;
}
说明:此时的swap(data)方法里,是将一个对象作为了一个实参赋给形参data’,而对象又存储的是地址值,因此方法main()和方法swap(data)指向了同一块内存空间,在swap(data)里进行操作就相当于在main()里面进行操作;即使swap(data)在运行结束后,被回收处理掉了,main()里的m和n的值同样被互换了。
内存解析: