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函数参数传递的方式,两者的区别主要在于参数传递过程中是否改变实际参数的值。对于不同的数据类型和需要的参数传递效果,我们可以选择适合的传递方式。
