1、传值(传递值):
在传值的情况下,函数接收到的是参数的一个副本,而不是参数本身。这意味着函数内部对参数的修改不会影响到原始值。传值通常用于基本数据类型(如整数、浮点数、布尔值等)的传递。
基本数据类型的传递(按值传递):
public class PassByValueExample {
public static void changeValue(int x) {
x = 2;
}public static void main(String[] args) {
int value = 1;
changeValue(value);
System.out.println(value); // 输出 1,因为传值时修改的是副本,不影响原始值
}
}
在这个例子中,changeValue
方法接收一个整数参数 x
,但它接收的是 value
的副本,而不是 value
本身。因此,changeValue
方法内部对 x
的修改不会影响到 value
的值。
2、传引用(传递引用):
在传引用的情况下,函数接收到的是参数的引用,即参数的地址或指针,而不是参数的副本。这意味着函数内部对参数的修改会影响到原始值。传引用通常用于复合数据类型(如列表、字典、对象等)的传递。
引用类型的传递(按值传递引用):
import java.util.ArrayList;
public class PassByReferenceExample {
public static void changeList(ArrayList<Integer> list) {
list.add(3);
}public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>();
myList.add(1);
myList.add(2);
changeList(myList);
System.out.println(myList); // 输出 [1, 2, 3],因为传引用时修改的是原始值
}
}
在不同的编程语言中,传值和传引用的实现方式可能有所不同。一些语言可能在传递大型对象时使用传引用,以避免复制大量数据,而其他语言可能始终使用传值或者提供了显式的语法来选择传值或传引用。对于理解函数调用中参数的行为,了解这两种传递方式是非常重要的。