藉由对数组对象的进一步探讨,您可以稍微了解Java对对象处理的一些作法,首先来看看一个一维数组参考名称的宣告:
int[] arr;
在这个宣告中,arr表示一个可以参考至一维数组对象的名称,但是目前还没有指定它参考至任何的对象,在Java中,=运算子用于基本数据型态时,是 将值复制给变量,但当它用于对象时,则是将对象指定给参考名称来参考,您也可以将同一个对象指定给两个参考名称,当对象的值藉由其中一个参考名称变更 时,另一个参考名称所参考到的值也会更动,使用下面的程序来作示范:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] tmp1; int[] tmp2; tmp1 = arr1; tmp2 = arr1; for(int i = 0; i < tmp1.length; i++) System.out.print(tmp1[i] + " "); System.out.println(); for(int i = 0; i < tmp2.length; i++) System.out.print(tmp2[i] + " "); System.out.println(); tmp1[2] = 9; for(int i = 0; i < tmp1.length; i++) System.out.print(tmp1[i] + " "); System.out.println(); for(int i = 0; i < tmp2.length; i++) System.out.print(tmp2[i] + " "); System.out.println(); } }
执行结果:
1 2 3 4 5 1 2 3 4 5 1 2 9 4 5 1 2 9 4 5?
在这个范例中,您藉由tmp1名称改变了索引2的元素值,所以tmp2所参考到的索引2的元素值也会改变,事实上在这个程序中,有三个参考名称参考至同一 个数组对象,也就是arr1、tmp1与tmp2,所以您应该也知道,arr1索引2的值在程序执行后所参考到的值也改变了。
在宣告int[] arr之后,arr表示它是一个一维数组对象的参考名称,所以它可以参考至任何长度的一维数组对象,使用下面这个例子来说明:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = {5, 6, 7}; int[] tmp; tmp = arr1; for(int i = 0; i < tmp.length; i++) System.out.print(tmp[i] + " "); System.out.println(); tmp = arr2; for(int i = 0; i < tmp.length; i++) System.out.print(tmp[i] + " "); System.out.println(); } }
执行结果:
1 2 3 4 5 5 6 7
在上面的程序中,tmp可以参考至5个元素的一维数组,也可以参考至3个元素的一维数组。
您了解到在Java中数组是一个对象,而使用 = 指定时是将对象指定给数组名来参考,而不是数组复制,如果您想将整个数组的值复制给另一个数组该如何作呢?您可以使用循环,将整个数组的元素值走访一遍,并指定给另一个数组相对应的索引位置,例如下面这个例子:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5]; for(int i = 0; i < arr1.length; i++) arr2[i] = arr1[i]; for(int i = 0; i < arr2.length; i++) System.out.print(arr2[i] + " "); System.out.println(); } }
执行结果:
1 2 3 4 5
另一个更简便的方法是使用System类别所提供的静态方法arraycopy(),其语法如下:
System.arraycopy(来源, 起始索引, 目的, 起始索引, 复制长度);
下面这个程序是个示范:
public class AdvancedArray { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5]; System.arraycopy(arr1, 0, arr2, 0, arr1.length); for(int i = 0; i < arr2.length; i++) System.out.print(arr2[i] + " "); System.out.println(); } }
执行结果:
1 2 3 4 5