- 值传递
一般是对于基本类型而言,传递的是变量值的一个副本,因此,对变量副本进行相关修改,不会影响原来的数据。
如下例子:
public static void main(String[] args) {
int i = 4;
System.out.println(i);
add(i);
System.out.println(i);
}
public static void add(int i){
i = i + 1;
}
结果:
- 引用传递
一般是对于对象型变量而言,传递的是对象变量的地址副本(相当于拷贝的是原对象的引用),并不是原对象本身。对应用对象的修改,会影响原对象。
如下例子:
public static void main(String[] args) {
List<List<String>> listA = new LinkedList<>();
List<String> listB = new ArrayList<>();
listB.add("before add");
System.out.println(listA);
listA.add(listB);
System.out.println(listA);
listB.add("after add");//对引用对象进行操作会同时改变原对象
System.out.println(listA);//fatherList中元素变为两条
}
结果: