Java中关于对数组的赋值和复制的区别与理解
①数组的赋值
package com.haha.bean;
/*
* 使用简单数组
* (1)创建一个名为Assignment的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组
* (2)使用{},把array1初始化为8个素数:2,3,5,7,11,13,17,19
* (3)显示array1的内容
* (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0] = 0,array[2] = 2),打印出array1
*
* 思考:array1和array2是什么关系?
* 由以下代码可知,把array1赋值给array2之后,而后修改了array2的值,发现array1也改变了,
* 由此可见,赋值操作并不是对值的赋值,而是对地址的赋值,由以前对数组的理解也可知,也是对数组地址的赋值
* 在堆空间中,栈中的数组指向了堆的同一个空间,着也相当于对一个文件的创建快捷方式,把快捷方式里的内容删去,
* 原文件里的内容也会被删除,因为这时同一个地址(详见 宋 p162)
* 拓展:修改题目,实现array2对array1数组的复制
* */
public class Assignment {
public static void main(String[] args) {
int[] array1,array2; //注意这里是如何定义数组的
array1 = new int[]{2,3,5,7,11,13,17,19};
for(int i=0;i<array1.length;i++){
System.out.print(array1[i]+" ");
}
System.out.println();
array2 = array1; //这里是数组的赋值,由于数组名表示地址值
for(int i=0;i<array2.length;i++){
if(i%2==0){
array2[i]=i;
}
}
for(int i=0;i<array1.length;i++){
System.out.print(array2[i]+" ");
}
}
}
②数组的复制
package com.xxx.bean;
/*
* 此代码实现了对数组的复制
* */
public class Copy {
public static void main(String[] args) {
int[] arr1, arr2; //千万别把两者合在一块写,那样是错误的写法
arr1 = new int[]{1, 2, 3, 4, 5, 6}; //数组元素的静态初始化
arr2 = new int[arr1.length]; //数组元素的动态初始化
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();
for(int i=0;i<arr2.length;i++){
if(i%2==0){
arr2[i] = i;
}
}
//由此处可以发现,数组复制产生的另一个数组的改变,并不会影响被复制的数组,原因就是此时开辟了两个空间
//这段代码new了两次,而另一个对数组赋值的操作中,只new了一次
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
}
}