JAVA传递参数有两种方式:
- 值传递,值传递是传递数据
- 引用传递,引用传递是把形参和实参的指针指向了堆中的同一对象
我们先来看值传递
public class ValuePass {
public static void main(String[] args) {
int value = 100;
testValue(value);
System.out.println("值传递之后"+value);
}
private static void testValue(int value){
value /= 10;
System.out.println("值传递参数"+value);
}
}
/*
*运行结果:
*值传递参数10
*值传递之后100
*/
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。比如java中的各种基本类型:int,float,double,boolean
等类型的。
再看引用传递
import java.util.ArrayList;
public class QuotePass {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println("引用传递之前" + list.toString());
helper(list);
System.out.println("引用传递之后" + list.toString());
}
public static void helper(ArrayList<Integer> list){
list.remove(0); //删除第一个元素
list.add(10); //添加一个元素追加到此列表的末尾。
}
}
/*
* 运行结果
* [1, 2, 3]
* [2, 3, 10]
*/
引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据,比如Object,二维数组,List,Map等除了基本类型的参数都是引用传递。