基础 | 数组的深浅拷贝

一、数组的定义

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]的引用地址进行复制,为<浅拷贝>
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值