欢迎访问宙启技术站
智能推送

Java函数的传参方式和传参规则

发布时间:2023-05-30 12:21:30

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); 
}

上面的代码中,参数 xy 的值分别为10和5,传递到函数 multiply 中后,形参 ab 的值也分别变成了10和5,但是对形参 ab 值的改变并不会影响到实参 xy 的值,所以运行结果为:

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函数的传参方式和传参规则分为四种,按值传递、按基本类型传递、按对象引用传递和按数组引用传递。对于按基本类型和按值传递的参数,形参是实参值的一份拷贝,两个变量在函数体内存储的是两份不同的数据,对形参的任何修改对实参不会有任何影响。对于按对象引用传递和按数组引用传递的参数,形参是实参的引用(即内存地址)的一个副本,形参的操作对实参存在影响。熟练掌握这些传参方式和规则对于程序的设计和开发都有很大帮助。