欢迎访问宙启技术站
智能推送

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中函数的参数传递方式可以简单的理解为基本数据类型采用值传递,对象类型采用引用传递。值传递会复制一份值给形参,函数内对形参的修改不会影响到原始值;引用传递会将引用传递给形参,函数内对形参引用的修改会影响到原始对象。