JAVA数组类型使用及内存解析(第12节)
JAVA中数组的概念
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成。
其中,每个数据称作一个元素,每个元素通过索引(下标)来访问他们。
数组的5个基本特征:
1 数组的长度是确定的,一旦被创建,长度就不可被改变;
2 数组元素的类型可以是任何数据类型,包括基础类型和引用类型;
3 数组元素的类型必须是相同类型,不允许出现混合类型;
4 数组变量属于引用类型,数组本质上也是对象;
5 数组是有索引的,索引从0开始,到数组(length-1)结束;
PS:数组中的每个元素相当于该对象的的成员变量。JAVA中的对象是在堆中的,
因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。
// 创建数组 int[] arr = new int[4]; // 赋值 arr[0] = 12; arr[1] = 22; arr[2] = 30; arr[3] = 41; // 可覆盖赋值 arr[2] = 35; // 数组内值的使用 System.out.println(arr[2]); // 35 // arr[4]; //请求超出数组长度的数据会报数组越界:ArrayIndexOutOfBoundsException // 获取数组长度 System.out.println(arr.length); // 4
数组内存存储理解
1 数组变量本身是存储在“栈”中,数组内的值存储在“堆”中
2 数组变量本身存储的是“堆”中索引为0的值的内存位置,
如:int类型数组内值占4个字节,若索引为0的值内存位为0X01,则索引为1的值内存位为0X05。。。
索引为3的值内存位为0XD,以此类推,每次增加一个类型字节数(内存位采用16进制记号)
3 创建数组时,数组内的值都有默认值,默认值根数组值类型有关系,详细如下:
byte[] 默认值:0
short[] 默认值:0
int[] 默认值:0
long[] 默认值:0
float[] 默认值:0.0
double[] 默认值:0.0
char[] 默认值:'\u0000'
boolean[] 默认值:false
引用数据类型的数组: null
详情见下图:
数组初始化分三种方式:
1 静态初始化:定义数组、为数组分配空间、给数组赋值同时进行;
2 动态初始化:定义数组与为数组分配空间、给数组赋值分开操作;
3 默认初始化:数组本身是引用类型,在数组创建并设定好长度后,
数组内每个元素的值已经有了默认值,默认值的具体值跟数组类型有关;
// 数组初始化分三种方式: // 1 静态初始化:定义数组、为数组分配空间、给数组赋值同时进行 // 如: double[] arr1 = {0.1,1.3}; double[] arr2 = new double[]{0.1,1.3}; // 2 动态初始化:定义数组与为数组分配空间、给数组赋值分开操作 // 如: int[] arr3; arr3 = new int[3]; arr3[0] = 111; arr3[1] = 222; arr3[2] = 333; // 3 默认初始化:数组本身是引用类型,在数组创建并设定好长度后,数组内每个元素的值已经有了默认值,默认值的具体值跟数组类型有关 // 如: char[] arr4 = new char[3];// 默认值为:'\u0000' System.out.println(arr4[2]);//空字符 System.out.println("上面是空字符");
PS:调用方法传递数组参数时,是把实参的内存地址传给形参,即实参和形参指向的是内存“堆”中的同一个数组变量;
内存图如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具