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

Java参数传递方法详解

发布时间:2023-07-06 10:22:48

在Java中,参数传递可以分为两种方式:值传递和引用传递。

值传递是指将实际参数的值复制一份传递给形式参数,这样在方法内对形式参数的修改不会影响到实际参数的值。Java中的基本数据类型如int、float等都是通过值传递进行参数传递的。

例如:

public void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

public static void main(String[] args) {
    int x = 10;
    int y = 20;
    swap(x, y);
    System.out.println("x=" + x + ", y=" + y);
}

输出结果为:x=10, y=20,因为swap方法中的a和b是形式参数,对它们的修改不会影响到实际参数x和y的值。

引用传递是指将实际参数的引用地址传递给形式参数,这样在方法内对形式参数的修改会影响到实际参数指向的对象,但是如果在方法内修改形式参数的引用地址,不会影响到实际参数的引用地址。Java中的对象类型如String、数组等都是通过引用传递进行参数传递的。

例如:

public void change(String str) {
    str = "world";
}

public static void main(String[] args) {
    String s = "hello";
    change(s);
    System.out.println("s=" + s);
}

输出结果为:s=hello,因为change方法中的str是形式参数,对它的修改不会影响到实际参数s的引用地址。

但是如果在方法内修改形式参数的属性,会影响到实际参数指向的对象。

例如:

public class Person {
    private String name;

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

    public void changeName(Person person) {
        person.setName("John");
    }

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

    public String getName() {
        return name;
    }
}

public static void main(String[] args) {
    Person p = new Person("Tom");
    p.changeName(p);
    System.out.println("name=" + p.getName());
}

输出结果为:name=John,因为changeName方法中修改了形式参数person的属性name,实际参数p指向的对象的属性也发生了相应的变化。

综上所述,Java中的参数传递既有值传递也有引用传递,对于基本数据类型是值传递,对于对象类型是引用传递。在方法内修改形式参数的值不会影响到实际参数的值,但是对形式参数引用的对象进行修改会影响到实际参数指向的对象的属性。