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

Java函数传递参数的常用方式有哪些?

发布时间:2023-06-26 06:25:21

Java函数传递参数的常用方式有以下几种:

1. 值传递

值传递是指在调用函数时,将实参的值复制一份作为形参的初始值,函数内部对形参的修改不会影响实参本身。

例如:

public class Test {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        swap(num1, num2);
        System.out.println("num1=" + num1); // 输出10
        System.out.println("num2=" + num2); // 输出20
    }
    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a=" + a); // 输出20
        System.out.println("b=" + b); // 输出10
    }
}

可以看到,swap函数内部的a和b发生了交换,但是num1和num2的值没有变化,说明是值传递。

2. 引用传递

引用传递与值传递类似,只不过形参是对象类型。在调用函数时,实参和形参指向同一个对象,函数内部对形参的修改会直接影响实参的值。

例如:

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[] {1, 2, 3};
        change(arr);
        System.out.println("arr[0]=" + arr[0]); // 输出10
    }
    public static void change(int[] a) {
        a[0] = 10;
    }
}

可以看到,函数change将实参arr的第一个元素修改为10后,主函数内部的arr数组也跟着改变,说明是引用传递。

3. 数组传递

数组传递是指将一个数组作为实参传递给函数,函数内部可以对数组的元素进行修改。数组传递实质上是引用传递的一种特例。

例如:

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[] {1, 2, 3};
        addOne(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]); // 输出2, 3, 4
        }
    }
    public static void addOne(int[] a) {
        for (int i = 0; i < a.length; i++) {
            a[i]++;
        }
    }
}

可以看到,函数addOne将数组每个元素加1后,主函数内部的arr数组也跟着改变,说明是数组传递。

4. 对象传递

Java中所有的类都是对象,对象传递是指将一个对象作为实参传递给函数,在函数内部可以修改对象的属性。

例如:

public class Test {
    public static void main(String[] args) {
        Person p = new Person("Tom", 20);
        changeName(p);
        System.out.println(p.getName()); // 输出"Jack"
    }
    public static void changeName(Person person) {
        person.setName("Jack");
    }
}
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

可以看到,函数changeName将Person对象的name属性修改为"Jack"后,主函数内部的p对象也跟着改变,说明是对象传递。

总结:

Java函数传递参数的常用方式有值传递、引用传递、数组传递和对象传递。其中,值传递是传递数值型变量,引用传递是传递对象型变量和数组。在使用Java函数传递参数时应根据实际情况选择适合的方式。