Java函数传递参数的常用方式有哪些?
发布时间:2023-06-26 06:25:21
Java函数传递参数的常用方式有以下几种:
1. 值传递
值传递是指在调用函数时,将实参的值复制一份作为形参的初始值,函数内部对形参的修改不会影响实参本身。
例如:
public class Test {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println("num1=" + num1); // 输出10
System.out.println("num2=" + num2); // 输出20
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a=" + a); // 输出20
System.out.println("b=" + b); // 输出10
}
}
可以看到,swap函数内部的a和b发生了交换,但是num1和num2的值没有变化,说明是值传递。
2. 引用传递
引用传递与值传递类似,只不过形参是对象类型。在调用函数时,实参和形参指向同一个对象,函数内部对形参的修改会直接影响实参的值。
例如:
public class Test {
public static void main(String[] args) {
int[] arr = new int[] {1, 2, 3};
change(arr);
System.out.println("arr[0]=" + arr[0]); // 输出10
}
public static void change(int[] a) {
a[0] = 10;
}
}
可以看到,函数change将实参arr的第一个元素修改为10后,主函数内部的arr数组也跟着改变,说明是引用传递。
3. 数组传递
数组传递是指将一个数组作为实参传递给函数,函数内部可以对数组的元素进行修改。数组传递实质上是引用传递的一种特例。
例如:
public class Test {
public static void main(String[] args) {
int[] arr = new int[] {1, 2, 3};
addOne(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 输出2, 3, 4
}
}
public static void addOne(int[] a) {
for (int i = 0; i < a.length; i++) {
a[i]++;
}
}
}
可以看到,函数addOne将数组每个元素加1后,主函数内部的arr数组也跟着改变,说明是数组传递。
4. 对象传递
Java中所有的类都是对象,对象传递是指将一个对象作为实参传递给函数,在函数内部可以修改对象的属性。
例如:
public class Test {
public static void main(String[] args) {
Person p = new Person("Tom", 20);
changeName(p);
System.out.println(p.getName()); // 输出"Jack"
}
public static void changeName(Person person) {
person.setName("Jack");
}
}
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;
}
}
可以看到,函数changeName将Person对象的name属性修改为"Jack"后,主函数内部的p对象也跟着改变,说明是对象传递。
总结:
Java函数传递参数的常用方式有值传递、引用传递、数组传递和对象传递。其中,值传递是传递数值型变量,引用传递是传递对象型变量和数组。在使用Java函数传递参数时应根据实际情况选择适合的方式。
