Java函数的参数传递方法有哪些?
发布时间:2023-06-17 02:39:01
Java函数的参数传递是指在调用函数时将所需数据传递给函数的过程。Java中有三种参数传递方式:值传递、引用传递和引用传递的副本机制。
1. 值传递
值传递是指传递的参数是基本数据类型。在调用函数时,实际参数的值被复制给形式参数,即在函数内部操作的是一个副本。修改这个副本不会影响到原始值。当函数执行结束时,这个副本也会被销毁。示例代码如下:
public class Test {
public static void main(String[] args) {
int a = 100;
int b = 200;
System.out.println("交换前:a=" + a + ",b=" + b);
swap(a, b);
System.out.println("交换后:a=" + a + ",b=" + b);
}
public static void swap(int num1, int num2) {
int tmp = num1;
num1 = num2;
num2 = tmp;
}
}
执行结果如下:
交换前:a=100,b=200 交换后:a=100,b=200
可以看出,原始的a和b的值并没有被交换。
2. 引用传递
引用传递是指传递的参数是引用类型。在调用函数时,实际参数的引用(内存地址)被复制给了形式参数,即在函数内部操作的是原始数据的引用。这意味着当在函数中修改了参数的值时,也会影响到原始值。示例代码如下:
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3};
System.out.println("修改前的值为:" + Arrays.toString(arr));
modify(arr);
System.out.println("修改后的值为:" + Arrays.toString(arr));
}
public static void modify(int[] arr) {
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
}
}
执行结果如下:
修改前的值为:[1, 2, 3] 修改后的值为:[10, 20, 30]
可以看出,在函数内部修改了arr的值,原始数组也随之改变。
3. 引用传递的副本机制
引用传递的副本机制是指传递的参数是引用类型,但是在函数内部创建了该参数的副本,然后对副本进行操作。这意味着虽然引用被复制了,但是原本的数据并没有被修改。这种传递方式是为了防止不小心修改了原始值而引起的问题。示例代码如下:
public class Test {
public static void main(String[] args) {
Person p = new Person("小明", 20);
System.out.println("修改前的值为:" + p.toString());
changeAge(p);
System.out.println("修改后的值为:" + p.toString());
}
public static void changeAge(Person p) {
p = new Person(p.getName(), 30);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Name: " + name + ", Age: " + age;
}
}
执行结果如下:
修改前的值为:Name: 小明, Age: 20 修改后的值为:Name: 小明, Age: 20
可以看出,在函数内部修改了传递进来的Person对象的副本,而原始的Person对象并没有被修改。
