Java中函数参数的传递方式详解
发布时间:2023-07-16 13:17:08
Java中函数参数的传递方式有两种:值传递和引用传递。
值传递:当基本数据类型作为函数参数时,实际传递的是值的拷贝。在函数内部对参数进行修改不会影响原始的变量。
例如:
public class Main {
public static void main(String[] args) {
int number = 10;
changeNumber(number);
System.out.println("原始值:" + number);
}
public static void changeNumber(int number) {
number = 20;
System.out.println("修改后的值:" + number);
}
}
运行结果:
修改后的值:20 原始值:10
从结果可以看出,虽然在changeNumber函数中修改了number的值,但是在main函数中的number变量的值并未受到影响。
引用传递:当对象作为函数参数时,实际传递的是对象的引用。在函数内部对参数进行修改会改变原始的对象。
例如:
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("Alice");
changePersonName(person);
System.out.println("修改后的姓名:" + person.getName());
}
public static void changePersonName(Person person) {
person.setName("Bob");
System.out.println("修改后的姓名:" + person.getName());
}
}
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行结果:
修改后的姓名:Bob 修改后的姓名:Bob
从结果可以看出,虽然changePersonName函数中修改了person的姓名,但是在main函数中的person对象的姓名也发生了改变。
需要注意的是,虽然引用传递传递的是对象的引用,但是不能在函数内部修改引用的指向,例如:
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
person1.setName("Alice");
Person person2 = new Person();
person2.setName("Bob");
System.out.println("person1的姓名:" + person1.getName());
System.out.println("person2的姓名:" + person2.getName());
swapPerson(person1, person2);
System.out.println("交换后person1的姓名:" + person1.getName());
System.out.println("交换后person2的姓名:" + person2.getName());
}
public static void swapPerson(Person person1, Person person2) {
Person temp = person1;
person1 = person2;
person2 = temp;
System.out.println("交换后person1的姓名:" + person1.getName());
System.out.println("交换后person2的姓名:" + person2.getName());
}
}
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行结果:
person1的姓名:Alice person2的姓名:Bob 交换后person1的姓名:Bob 交换后person2的姓名:Alice 交换后person1的姓名:Bob 交换后person2的姓名:Alice 交换后person1的姓名:Bob 交换后person2的姓名:Alice
从结果可以看出,虽然在swapPerson函数中交换了person1和person2的引用,但是在main函数中的person1和person2对象的引用并未发生改变。
综上所述,Java中函数参数的传递方式有两种:值传递和引用传递。对于基本数据类型,采用值传递,对于对象,采用引用传递。
