版权声明:转载请注明出处!! https://blog.csdn.net/IPI715718/article/details/88374765
首先解释一下值传递和引用传递的概念
值传递:值传递是指在参数的传递过程中,形参拿到的只是实参的数值,而并非实参的地址,是对实参所指向对象的一个副本的操作,对形参的修改不会影响到实参的值。
引用传递:引用传递是指在参数的传递过程中形参拿到的是实参的地址,是对数据单元的数据的直接操作,对形参的修改会影响到实参的值。
值传递举例:
public class Test{
public static void main(String[] args) {
int a = 1, b=2;
Test test = new Test();
test.change(a, b);
System.out.println("a="+a+"b="+b);
}
public void change(int i, int j) {
int t = i;
i = j;
j = t;
}
}
结果:
a=1b=2
很显然是一个值传递,只是将a所指的对象在内存单元中复制一个副本,然后将副本传递给形参。
画图说明
对象空间分配
参数传递后
方法体执行后
可以看出是值传递的过程。
引用传递举例:
public class Test{
public static void main(String[] args) {
int[] a = {1,2,3,4};
Test test = new Test();
test.change(a);
System.out.println(a[1]);
}
public void change(int[] b) {
b[1] = 3;
}
}
结果:
3
可以看出,基本类型的数据的参数传递 和晓得引用类型的数据的参数的传递因为在副本的建立时只需要占用很小的空间,因此是采用的值传递,数组集合这种大对象在副本的复制中会消耗大量的资源和内存空间,因此是引用传递。