Java中传递参数的方式
发布时间:2023-06-17 02:58:04
Java中的参数传递方式有三种:值传递、引用传递和引用传递的副本。
1. 值传递
值传递是指将参数的值复制一份,然后将复制的值传递给调用方法。在方法中,对该参数的任何修改都不会影响调用方法中原始的值。
public class Main {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println(num1 + " " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
在上面的代码中,调用swap方法传递了两个参数num1和num2。在swap方法中,参数a和b是num1和num2的副本,swap方法对a和b值的修改不会影响调用方法中的num1和num2的值。
2. 引用传递
引用传递是指将参数的引用复制一份,然后将复制的引用传递给调用方法。在方法中,对该参数的任何修改都会影响调用方法中原始的引用指向的对象。
public class Main {
public static void main(String[] args) {
int[] array = new int[]{1, 2, 3};
addOne(array);
System.out.println(Arrays.toString(array));
}
public static void addOne(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]++;
}
}
}
在上面的代码中,调用addOne方法传递了一个数组参数array。在addOne方法中,参数arr是array的副本,但是arr和array引用了同一个数组对象。addOne方法对arr引用的数组对象进行修改,发生的改变同样影响调用方法中的array的值。
3. 引用传递的副本
在某些情况下,需要保留对原始对象的引用,同时在方法中对引用复制进行修改。这时可以使用引用传递的副本方式,即将参数的引用创建一个副本,然后将副本传递给调用方法。在方法中,对该参数的任何修改都会影响副本引用指向的对象,但不会影响调用方法中原始的引用。
public class Main {
public static void main(String[] args) {
int[] array = new int[]{1, 2, 3};
int[] copy = Arrays.copyOf(array, array.length);
addOne(copy);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(copy));
}
public static void addOne(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]++;
}
}
}
在上面的代码中,调用addOne方法传递了一个数组参数copy,该数组是通过Arrays类中的copyOf方法复制的,复制的数组和原始的数组引用不同的对象。在addOne方法中,参数arr是copy的副本引用,对arr引用的数组对象进行修改仅影响副本,不改变调用方法中原始的array的值。
