一、数组的定义
JVM中包含五部分:Java栈,Java堆,程序计数器,方法区和本地方法栈
Java栈: 函数调用,函数定义的基本数据类型的变量和引用变量都在栈内存中
Java堆:存放由new创建的对象和数组以分配内存,通过访问arr的地址直接找到堆上的内存。
1.一维数组
(1)int[] arr={1,2,3,4,5};
(2)int[] arr=new int[]{1,2,3,4,5};
(3)int[] arr=new int[5];
注:一维数组错误的定义方式:
int[] arr=new int[5]{1,2,3,4,5};//不能定义数组大小的同时进行初始化
int[] brr=new int[];//定义时时需敲定所需元素个数或初始值,让程序自动推出数组元素个数
2.二维数组
(1)int[][] arr={{1,2,3},{4,5,6}};
(2)int[][] arr=new[][]{{1,2,3},{4,5,6}};
(3)int[][] arr=new int[3][];
//二维数组相当于把一维数组里的每一个值当成了一个一维数组
二、拷贝方式
1.一维数组四种拷贝方式
2.二维数组四种拷贝方式
三、深浅拷贝
深拷贝:新的数组拷贝了旧的数组,当新的数组值发生改变时,不会影响旧数组的值,即新数组新开辟了内存空间,两者无内存共享问题
浅拷贝:新数组拷贝了旧的数组,但是只是复制了原数组的引用地址,即两个数组指向同一个内存地址,所以修改一个的值另一个数组的值也会随之改变,即存在内存共享
1.一维数组
运行程序,并对其任意值重新赋值,观察地址和数值变化
运行结果发现:一维数组的四种拷贝方式均属于<深拷贝>
2.二维数组
运行结果发现:二维数组四种拷贝方式得到的地址都不相同
而只有for循环拷贝方式中arr[i]的值与crr[i]的值不相同
故 只有for循环进行了深拷贝,其余方式都是在堆中直接将arr[i]的引用地址进行复制,为<浅拷贝>