在Java中对函数参数的传递方式有哪些?
发布时间:2023-07-06 13:03:16
在Java中,函数参数的传递方式主要有值传递和引用传递两种方式。
1. 值传递(Pass by Value):在值传递中,函数的参数是基本类型(如int、float等)或者不可变对象(如String、Integer等)时,传递的是参数的副本,而不是参数本身。
示例代码:
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
从执行结果可以看出,函数内部交换了参数a和b的值,但是在函数外部x和y的值并没有发生变化,说明值传递只是传递参数的副本,不会影响参数的原始值。
2. 引用传递(Pass by Reference):在引用传递中,函数的参数是可变对象(如数组、集合、自定义类等)时,传递的是参数的引用,而不是参数的副本。
示例代码:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void changeName(Person p) {
p.name = "New Name";
}
public static void main(String[] args) {
Person person = new Person("Old Name");
person.changeName(person);
System.out.println(person.name);
}
}
执行结果:New Name
从执行结果可以看出,函数内部修改了参数p的属性值,实际上改变的是参数所引用的对象的属性值,对参数本身并没有改变,所以在函数外部打印person.name时,输出的是新的名字"New Name"。
需要注意的是,在Java中并不存在真正的引用传递,而是通过在函数中操作引用所指向的对象来达到修改原始对象的效果。
