程序清单5-10:TestArrayValue.java |
public class TestArrayValue { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = {1, 2, 3, 4, 5};
int[] tmp = arr1;
System.out.println(arr1 == arr2); System.out.println(arr1 == tmp); System.out.println(arr2 == tmp); } } |
在范例5-10中,虽然arr1与arr2中的元素值是相同的,arr1 == arr2并非比较arr1和arr2数组元素值,而是引用的比较,比较arr1和arr2是否指向的是内存中同一个位置。但实际上arr1与arr2是引用自不同的两个数组对象, arr1== arr2布尔表达式的值为false。将arr1指定给tmp来引用,由于tmp与arr1是引用同一数组对象,所以进行==比较时会显示true;而tmp与arr2是引用自不同数组对象,所以进行==比较时会显示false。执行结果如下:false
true
false
进行数组复制的另一种方法是使用System类提供的arraycopy()方法。其语法如下:
System.arraycopy(来源, 起始索引, 目的, 起始索引, 复制长度);
修改范例5-9,使用
System.arraycopy(array1, 0, array3, 0, array1.length);
替换掉原有的相应代码,实现数组的复制。测试程序,保证程序的运行结果与原来一致。