当数组名直接赋值给数组名的时候。
class Test3 {
public static void main(String[] args) {
int[] arr1 = new int[]{1,3,5,7,9,11,13,15};
int[] arr2;
for(int i = 0; i < arr1.length;i++){
System.out.print(arr1[i]+" ");
}
System.out.println();
//arr2 被arr1赋值上地址值,不能称为复制。
arr2 = arr1;
for(int i = 0; i < arr1.length;i++){
if(i % 2 == 0){
arr2[i] = i;
}
System.out.print(arr2[i]+" ");
}
System.out.println();
for(int i = 0; i < arr1.length;i++){
System.out.print(arr1[i]+" ");
}
System.out.println();
}
我们能得到一个结论:
此前输出数组arr1的元素,直到arr2对偶数索引进行重新赋值,再输出数组arr1时,会发现数组arr1的元素跟数组arr2一样。 说明了数组复制,就是在开辟的堆空间中把首元素地址继续赋值给栈的另一个变量,但是两个不同的数组名在栈中是同时指向同一个堆中的数组元素。 相当于windows中创建的快捷方式。
数组复制
int[] arr3 = new int[arr1.length];
for(int i = 0; i < arr3.length;i++){
arr3[i] = arr1[i];
}
}
//数组反转
class ArrayTest {
public static void main(String[] args) {
// 数组的反转
String[] arr = new String[]{"GG","DD","JJ","MM","AA","BB"};
for(int i = 0;i < arr.length/2;i++){
String tmp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = tmp;
}
for(int j = 0; j < arr.length;j++){
System.out.print(arr[j]+" ");
}
System.out.println();
}
}