Java函数的传参方式和传参规则
Java是一门面向对象的编程语言,通过函数来实现程序功能的组合和重用。函数是程序中的基本组成单元,通过函数可以将代码分解为较小的可维护的模块,便于调用和管理。
在Java中,函数可以通过传递参数来获取调用者的输入并完成相关的操作。Java函数的传参方式可以分为四种:按值传递、按基本类型传递、按对象引用传递和按数组引用传递。
1. 按值传递
按值传递是指将实参的值复制一份并传递给形参,函数内部对形参的操作不会影响到实参的值。这个概念很容易理解,例如:
public static void multiply(int a, int b) {
int c = a * b;
System.out.println("a * b = " + c);
}
public static void main(String[] args) {
int x = 10, y = 5;
multiply(x, y);
System.out.println("x = " + x + ", y = " + y);
}
上面的代码中,参数 x 和 y 的值分别为10和5,传递到函数 multiply 中后,形参 a 和 b 的值也分别变成了10和5,但是对形参 a 和 b 值的改变并不会影响到实参 x 和 y 的值,所以运行结果为:
a * b = 50 x = 10, y = 5
我们可以理解为,形参是实参值的一份拷贝,两个变量在函数体内存储的是两份不同的数据,对形参的任何修改对实参不会有任何影响。
2. 按基本类型传递
按基本类型传递和按值传递一样,也是将实参值复制一份并传递给形参,函数内部对形参的操作也不会影响到实参的值,只不过这种传递方式用于基本类型的数据,例如数字、字符、布尔型等。
public static void change(int num) {
num += 10;
System.out.println("num = " + num);
}
public static void main(String[] args) {
int a = 5;
change(a);
System.out.println("a = " + a);
}
上面的代码中,参数 a 的值为5,传递到函数 change 中后,形参 num 的值变成了15,但是对形参 num 的改变并不会影响到实参 a 的值,所以运行结果为:
num = 15 a = 5
3. 按对象引用传递
按对象引用传递是指将实参的引用(即内存地址)复制一份并传递给形参,形参的操作对实参存在影响。在Java中,对象是通过引用来访问内存中的数据的,例如:
public class Person {
public int age;
public String name;
}
public static void change(Person p) {
p.age += 10;
p.name = "Tom";
System.out.println("Person's age = " + p.age);
System.out.println("Person's name = " + p.name);
}
public static void main(String[] args) {
Person person = new Person();
person.age = 20;
person.name = "Jerry";
change(person);
System.out.println("Person's age = " + person.age);
System.out.println("Person's name = " + person.name);
}
上面的代码中,我们定义了一个 Person 类,有年龄和姓名两个字段。在主函数中,我们新建了一个 person 对象,并将其传递给函数 change,在函数内部对 person 对象的年龄和姓名进行了改变。改变之后,我们再次输出 person 对象的年龄和姓名,发现它们的值已经被修改了,即形参的改变已经影响到了实参。
4. 按数组引用传递
数组也是一种对象,按数组引用传递和按对象引用传递是类似的,只不过形参是数组类型的变量。
public static void change(int[] array) {
array[0] = 10;
System.out.println("array[0] = " + array[0]);
}
public static void main(String[] args) {
int[] a = {1, 2, 3};
change(a);
System.out.println("a[0] = " + a[0]);
}
在上面的代码中,我们首先定义了一个长度为3的数组 a,将其传递给函数 change。在函数内部,我们将数组的 个元素的值改为10,并打印出来。然后再次输出数组 a 的 个元素的值,发现它已经被修改了,即形参的改变已经影响了实参。
综上所述,Java函数的传参方式和传参规则分为四种,按值传递、按基本类型传递、按对象引用传递和按数组引用传递。对于按基本类型和按值传递的参数,形参是实参值的一份拷贝,两个变量在函数体内存储的是两份不同的数据,对形参的任何修改对实参不会有任何影响。对于按对象引用传递和按数组引用传递的参数,形参是实参的引用(即内存地址)的一个副本,形参的操作对实参存在影响。熟练掌握这些传参方式和规则对于程序的设计和开发都有很大帮助。
