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

Java函数参数传递方法:值传递和引用传递对比

发布时间:2023-07-03 00:24:56

在Java中,函数参数传递可以采取两种方式:值传递和引用传递。这两种方式在参数传递过程中有着不同的特点和应用场景。

值传递是指将实际参数的值复制一份传递给形式参数。也就是说,在函数调用时,会将实际参数的值赋值给形式参数,在函数内部修改形式参数的值不会影响到实际参数的值。例如下面这个例子:

public void changeValue(int value) {
    value = 10;
}

public static void main(String[] args) {
    int i = 5;
    changeValue(i);
    System.out.println(i);  // 输出结果为5
}

在上述例子中,changeValue方法的形式参数value被复制了一份实际参数i的值,并在方法内部将value的值修改为10。但是最后在main方法中打印i的值时,输出结果仍然是5。说明值传递不会改变实际参数的值。

引用传递是指将实际参数的引用(内存地址)复制一份传递给形式参数。也就是说,在函数调用时,会将实际参数的引用传递给形式参数,形式参数和实际参数指向同一个对象。因此,在函数内部修改形式参数的值会影响到实际参数。例如下面这个例子:

class Person {
    private String name;

    public Person(String n) {
        name = n;
    }

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }
}

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

public static void main(String[] args) {
    Person p = new Person("John");
    changeName(p);
    System.out.println(p.getName());  // 输出结果为Tom
}

在上述例子中,changeName方法的形式参数person接收到了实际参数p的引用,形式参数和实际参数指向同一个Person对象。在方法内部通过调用setName方法修改了person对象的name属性值为"Tom"。在main方法中通过调用p的getName方法可以获得到修改后的属性值,输出结果为"Tom"。

需要注意的是,Java中的基本类型(例如int、float等)是采用值传递的方式进行参数传递,而类对象是采用引用传递的方式进行参数传递。

总结来说,值传递和引用传递都是Java函数参数传递的方式,两者的区别主要在于参数传递过程中是否改变实际参数的值。对于不同的数据类型和需要的参数传递效果,我们可以选择适合的传递方式。