Java函数传参方式解析
Java函数中传参方式有4种,分别是值传递、引用传递、值引用传递和数组传参。下面分别对这四种方式进行详细的解析。
1. 值传递
值传递是指将参数的值传递给函数,在函数内部对参数进行修改不会影响原来的值。这是因为函数内部改变的是参数的副本,而不是参数本身。值传递适用于基本数据类型,例如int、float、double等等。
示例代码:
public class Main {
public static void main(String[] args) {
int a = 1;
change(a);
System.out.println(a); // 输出结果为1
}
public static void change(int a) {
a = 2;
}
}
在Main类中定义了一个名为a的int类型变量,然后调用change方法,输出结果为1,说明在函数内部对a进行修改并没有改变原来的值。
2. 引用传递
引用传递是指将参数的引用地址传递给函数,在函数内部对参数进行修改会影响原来的值。这是因为函数内部操作的是对象本身,而不是对象的副本。引用传递适用于对象类型。
示例代码:
public class Main {
public static void main(String[] args) {
Person john = new Person("John", 20);
change(john);
System.out.println(john.getName()); // 输出结果为"Peter"
}
public static void change(Person p) {
p.setName("Peter");
}
}
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;
}
}
在Person类中定义了一个名为name的String类型变量和一个名为age的int类型变量,然后在Main类中创建了一个Person类型的对象john,并调用change方法,输出结果为“Peter”,说明在函数内部对Person对象进行修改成功。
3. 值引用传递
值引用传递是指将一个对象的引用赋值给一个临时变量,然后将这个临时变量的值传递给函数,这个临时变量就称为值引用。在函数内部对值引用进行修改会影响原来的值。值引用适用于对象类型。
示例代码:
public class Main {
public static void main(String[] args) {
Person john = new Person("John", 20);
Person peter = new Person("Peter", 21);
swap(john, peter);
System.out.println(john.getName()); // 输出结果为"Peter"
System.out.println(peter.getName()); // 输出结果为"John"
}
public static void swap(Person p1, Person p2) {
Person temp = p1;
p1 = p2;
p2 = temp;
}
}
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;
}
}
在Main类中创建了两个Person对象john和peter,并调用swap方法交换它们的值,输出结果显示john的名字变成了“Peter”,peter的名字变成了“John”,说明在函数内部对值引用进行修改成功。
4. 数组传参
数组传参是指将数组的引用地址传递给函数,在函数内部对数组进行修改会影响原来的值。数组传参适用于数组类型。
示例代码:
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
modifyArr(arr);
System.out.println(Arrays.toString(arr)); // 输出结果为"[2, 3, 4]"
}
public static void modifyArr(int[] arr) {
for(int i = 0; i < arr.length; i++) {
arr[i]++;
}
}
}
在Main类中创建了一个长度为3的int类型数组,并调用modifyArr方法对数组进行修改,输出结果显示数组的值变成了“[2, 3, 4]”,说明在函数内部对数组进行修改成功。
总结:
Java函数传参方式有4种:值传递、引用传递、值引用传递和数组传参。值传递适用于基本数据类型,引用传递和值引用传递适用于对象类型,数组传参适用于数组类型。需要注意的是,在值引用传递中对值引用本身进行修改会影响原来的值,在其他三种传参方式中对参数进行修改不会影响原来的值。
