【Java笔记】数组传递给方法

来源:互联网 发布:海外网络推广 编辑:程序博客网 时间:2024/05/20 15:10

数组传递给方法

数组的复制

在说数组传递给方法之前先扯一下数组的复制。一开始想进行数组的复制时,我丝毫没有犹豫的使用了赋值语句。

array1 = array2;

这样做 array1 的值的确和 array2 的内容一样了,但这并没有把 array2 的内容复制给 array1(这句话好绕啊)。

Java 中,可以使用赋值语句来复制基本数据类型的变量,但不能复制数组。将一个数组变量赋值给另一个数组变量,实际上是将一个数组的引用赋值给另一个数组。例如上面那条语句,实际上是将 array2 的引用值复制给了 array1,此时 array1 也指向了 array2 的内容,这样就没有指向原先 array1 的内容的了,原先 array1 的内容也无法引用了,就变成了垃圾,java 虚拟机将会自动收回。并且改变 array1 或 array2 任意一个的内容,两者的内容都会发生改变,因为它们是指向内存中同一个地方的。

所以如果要进行数组的复制的话据我所知有三种方法:
1. 使用循环语句逐个复制数组的元素。
2. 使用 System 类中的静态方法 arraycopy。
3. 使用 clone 方法复制数组。

数组传递给方法

和上面用赋值语句复制数组一样,数组传递给方法的也是数组的引用值。

所以和传递基本数据类型的变量不同,方法中对数组进行的修改在方法结束后这些修改还是保留的,因为方法中的数组和方法外的那个数组指向内存中同一块地方。下面的代码就很好的体现了这一特点。

public class Test {    public static void main(String[] args) {        int a = 1, b = 2;        int[] array = {1, 2};        System.out.println("before swapInt");        System.out.println("a = " + a + "\tb = " + b);        swapInt(a, b);        System.out.println("after swapInt");        System.out.println("a = " + a + "\tb = " + b);        System.out.println("\nbefore swapElement");        System.out.println("array is {" + array[0] + ", " + array[1] + "}");        swapElement(array);        System.out.println("after swapElement");        System.out.println("array is {" + array[0] + ", " + array[1] + "}");    }    public static void swapInt(int a, int b) {        int temp = a;        a = b;        b = temp;    }    public static void swapElement(int[] array) {        int temp = array[0];        array[0] = array[1];        array[1] = temp;    }}

输出结果为

before swapInt
a = 1 b = 2
after swapInt
a = 1 b = 2

before swapElement
array is {1, 2}
after swapElement
array is {2, 1}

可见数组传递给方法的是数组的引用值

0 0