Java中函数的参数是如何传递的?
发布时间:2023-07-06 12:35:28
在Java中,函数的参数传递有两种方式:值传递和引用传递。
1. 值传递:
值传递是指将实参的值复制一份传递给形参,函数内部对形参的修改不会影响实参的值。Java中的基本数据类型(如int、float、double等)都采用值传递。
例如:
public void changeValue(int num) {
num = 10;
}
public static void main(String[] args) {
int num = 5;
changeValue(num);
System.out.println(num); // 输出为5
}
在上述代码中,调用changeValue()方法时,变量num的值会被复制给参数num,函数内部对参数num的修改不会影响到原始变量num的值。
2. 引用传递:
引用传递是指将实参的引用传递给形参,函数内部对形参的操作会直接影响到实参的值。Java中的对象(包括自定义类对象和Java集合类对象)采用引用传递。
例如:
public void changeValue(List<Integer> list) {
list.add(10);
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
changeValue(list);
System.out.println(list); // 输出为[10]
}
在上述代码中,调用changeValue()方法时,变量list的引用被传递给参数list,函数内部对参数list的操作会直接影响到原始变量list所引用的对象。
需要注意的是,虽然引用传递可以修改对象的内容,但是如果在函数内部将形参的引用指向新对象,不会影响到原始变量的引用。
例如:
public void changeReference(List<Integer> list) {
list = new ArrayList<>(); // 将形参list引用指向新对象
list.add(10);
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
changeReference(list);
System.out.println(list); // 输出为[]
}
在上述代码中,函数内部将参数list的引用指向了一个新的ArrayList对象,但是并没有修改原始变量list的引用,所以最终输出为空的ArrayList对象。
总结起来,Java中函数的参数传递方式可以简单的理解为基本数据类型采用值传递,对象类型采用引用传递。值传递会复制一份值给形参,函数内对形参的修改不会影响到原始值;引用传递会将引用传递给形参,函数内对形参引用的修改会影响到原始对象。
