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

Java函数传参方式解析

发布时间:2023-05-27 13:39:34

Java函数中传参方式有4种,分别是值传递、引用传递、值引用传递和数组传参。下面分别对这四种方式进行详细的解析。

1. 值传递

值传递是指将参数的值传递给函数,在函数内部对参数进行修改不会影响原来的值。这是因为函数内部改变的是参数的副本,而不是参数本身。值传递适用于基本数据类型,例如int、float、double等等。

示例代码:

public class Main {
    public static void main(String[] args) {
        int a = 1;
        change(a);
        System.out.println(a); // 输出结果为1
    }
    public static void change(int a) {
        a = 2;
    }
}

在Main类中定义了一个名为a的int类型变量,然后调用change方法,输出结果为1,说明在函数内部对a进行修改并没有改变原来的值。

2. 引用传递

引用传递是指将参数的引用地址传递给函数,在函数内部对参数进行修改会影响原来的值。这是因为函数内部操作的是对象本身,而不是对象的副本。引用传递适用于对象类型。

示例代码:

public class Main {
    public static void main(String[] args) {
        Person john = new Person("John", 20);
        change(john);
        System.out.println(john.getName()); // 输出结果为"Peter"
    }
    public static void change(Person p) {
        p.setName("Peter");
    }
}
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;
    }
}

在Person类中定义了一个名为name的String类型变量和一个名为age的int类型变量,然后在Main类中创建了一个Person类型的对象john,并调用change方法,输出结果为“Peter”,说明在函数内部对Person对象进行修改成功。

3. 值引用传递

值引用传递是指将一个对象的引用赋值给一个临时变量,然后将这个临时变量的值传递给函数,这个临时变量就称为值引用。在函数内部对值引用进行修改会影响原来的值。值引用适用于对象类型。

示例代码:

public class Main {
    public static void main(String[] args) {
        Person john = new Person("John", 20);
        Person peter = new Person("Peter", 21);
        swap(john, peter);
        System.out.println(john.getName()); // 输出结果为"Peter"
        System.out.println(peter.getName()); // 输出结果为"John"
    }
    public static void swap(Person p1, Person p2) {
        Person temp = p1;
        p1 = p2;
        p2 = temp;
    }
}
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;
    }
}

在Main类中创建了两个Person对象john和peter,并调用swap方法交换它们的值,输出结果显示john的名字变成了“Peter”,peter的名字变成了“John”,说明在函数内部对值引用进行修改成功。

4. 数组传参

数组传参是指将数组的引用地址传递给函数,在函数内部对数组进行修改会影响原来的值。数组传参适用于数组类型。

示例代码:

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        modifyArr(arr);
        System.out.println(Arrays.toString(arr)); // 输出结果为"[2, 3, 4]"
    }
    public static void modifyArr(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            arr[i]++;
        }
    }
}

在Main类中创建了一个长度为3的int类型数组,并调用modifyArr方法对数组进行修改,输出结果显示数组的值变成了“[2, 3, 4]”,说明在函数内部对数组进行修改成功。

总结:

Java函数传参方式有4种:值传递、引用传递、值引用传递和数组传参。值传递适用于基本数据类型,引用传递和值引用传递适用于对象类型,数组传参适用于数组类型。需要注意的是,在值引用传递中对值引用本身进行修改会影响原来的值,在其他三种传参方式中对参数进行修改不会影响原来的值。