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

Java函数——参数传递方式详解

发布时间:2023-06-18 21:56:34

在Java编程中,有时需要向函数中传递参数,以便函数能执行相关操作并返回结果。Java中有三种参数传递方式:值传递、引用传递和引用传递按值传递。

值传递

值传递就是将参数的值复制一份传递给函数使用,函数对参数进行任何修改都不会改变参数本身的值。例如:

public static void main(String[] args) {
    int num = 10;
    change(num);
    System.out.println(num); // 输出结果为10,表示num的值没有改变
}

public static void change(int a) {
    a = 5;
}

在上面的代码中,change(num)的作用不是修改num的值,而是将num的值复制一份赋给形参a,所以对a的任何修改都不会影响到num的值。

引用传递

引用传递就是将参数的地址传递给函数使用,而不是复制参数的值。因此,当函数对参数进行修改时,原参数也会发生相应的改变。例如:

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    change(array);
    System.out.println(Arrays.toString(array)); // 输出结果为[10, 20, 30],表示array的值被改变了
}

public static void change(int[] a) {
    for (int i = 0; i < a.length; i++) {
        a[i] *= 10;
    }
}

在上面的代码中,change(array)的作用是将array的地址传递给形参a,然后在函数中对a进行操作,最终改变了array的值。

引用传递按值传递

引用传递按值传递是一种特殊的传递方式,它既可以保证函数对参数的修改能够反映到原参数上,又不会改变原参数的引用地址。例如:

public static void main(String[] args) {
    Person person = new Person("Alice");
    change(person);
    System.out.println(person.getName()); // 输出结果为Bob,表示person的名称被改变了
}

public static void change(Person p) {
    p.setName("Bob");
}

class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在上面的代码中,change(person)的作用是将person的地址传递给形参p,然后在函数中对p进行操作,最终改变了person的名称,但没有改变person的引用地址。

总结

值传递和引用传递是Java中常用的两种参数传递方式,值传递保证了参数的值不会被改变,而引用传递保证了对参数的真实修改可以反映到原参数上。引用传递按值传递是一种特殊的传递方式,既能够保证函数对参数的真实修改,在不改变原参数引用地址的前提下,又能够保证对参数值的修改不会影响原参数。开发者应该了解这些参数传递方式并善加利用,以便更好地编写出高效、可维护的Java程序。