前言:数组就是一个容器,用来存储一批同种类型的数据。
一、数组的定义和访问
1、静态初始化数组
定义数组的时候直接给数组赋值。
注意:
(1)“数据类型[] 数组名”也可以写成“数据类型 数组名[]”;
(2)什么类型的数组只能存放什么类型的数据。
数组在计算机中的基本原理:
数组名ages中存储的是数组在内存中的地址,数组(对象)是一种引用数据类型。
2、数组的访问
数组名[索引]
例如 arr[1],arr[2]=100
数组的长度属性:length,例如 arr.length
获取数组的最大索引:arr.length - 1(数组中存在数据,不是空数组)
3、数组的遍历
应用:求和,元素搜索,找最大值、最小值
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
4、动态初始化数组
定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度。
定义时存储默认值,如int类型的数组存储默认值0。
动态初始化数组元素默认值规则:
业务场景
- 动态初始化:开始不确定具体元素值,只知道元素个数。
- 静态初始化:一开始就知道要存入哪些元素值。
二、数组在计算机中的执行原理
1、Java内存分配
- 方法区
- 栈
- 堆
main方法(函数)想要执行时,必须将其放入栈中,数组一类的数据存储在堆中。
例子:请说明 int[] arr = new int[3] 的执行原理。
new int[3] 是创建一个数组对象,会在堆内存中开辟区域存储3个整数;arr 是变量,在栈内存中,arr 中存储的是数组对象在堆内存中的地址值。
2、多个变量指向同一个数组
int[] arr1 = {11, 22, 33};
int[] arr2 = arr1; // 将arr1变量存储的地址赋值给arr2变量
arr2[1] = 99;
System.out.printIn(arr1[1]); // 输出99
以上代码中变量arr1和arr2指向堆内存中的同一个数组对象,通过arr2修改数组元素的值也可以通过arr1反映出来。
如果某个数组变量存储的地址为null,那么该变量将不再指向任何数组对象(访问会出错,空指针异常)。