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

Java 函数的参数传递方式——传值还是传引用?

发布时间:2023-05-25 13:35:13

Java 函数的参数传递方式是一个常见问题,它也是常见的面试题之一。在 Java 中,参数传递可以是传值或传引用。

传值

Java 中的基本数据类型(如 int、double、char 等)都是属于值类型,参数传递时是按值传递的。按值传递意味着在调用函数时,实参的值被复制到形参中,函数内部对形参的修改不会影响实参的值。

例如,在下面的示例中,函数 addFive 的参数 num 是按值传递的,即函数内部对 num 的修改不会影响主函数中的变量 x:

public class Main {
    public static void main(String[] args) {
        int x = 5;
        addFive(x);
        System.out.println(x); // 输出 5
    }
    
    public static void addFive(int num) {
        num += 5;
    }
}

传引用

Java 中的对象类型都是引用类型,参数传递时可以按引用传递。按引用传递意味着在调用函数时,实参的引用被复制到形参中,函数内部对形参的修改会影响实参。

例如,在下面的示例中,函数 addToList 的参数 list 是按引用传递的,即函数内部对 list 的修改会影响主函数中的变量 myList:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> myList = new ArrayList<>();
        myList.add("A");
        myList.add("B");
        addToList(myList);
        System.out.println(myList); // 输出 [A, B, C]
    }

    public static void addToList(List<String> list) {
        list.add("C");
    }
}

注意:Java 中没有指针的概念,所以不能按指针传递参数。引用类型传递的本质是传递对象的地址,而不是传递对象本身。

总结

Java 中参数传递可以是传值或传引用。基本数据类型按值传递,对象类型按引用传递。了解传值和传引用之后,我们就可以更好地理解 Java 中的参数传递机制,避免一些常见的错误。