数组
数组
定义:存放一组相同类型数据的集合
1. 特点
- 数组是存储同一种数据类型多个元素的集合,可看成是一个容器
- 数组可存储基本数据类型,也可存储引用数据类型
- 数组是Java中唯一的底层容器,集合的底层也是用的数组
2. 数组初始化
- 静态初始化
- 数据类型[] 数组名称 = new 数据类型[]{数组元素}
String[] nameArr = new String[]{"张三","李四","王五","赵柳"};
- 数据类型[] 数组名称 = {数组元素}
String[] nameArr = {"张三","李四","王五","赵柳"};
- 动态初始化
- 数据类型[] 数组名称 = new 数据类型[数组长度]
String[] nameArr = new String[4]; nameArr[0] = "张三"; nameArr[1] = "李四"; nameArr[2] = "王五"; nameArr[3] = "赵柳";
3. 数组操作
- 修改
String[] nameArr = new String[]{"张三","李四","王五","赵柳"};
nameArr[0] = "田七";
- 查看
String[] nameArr = new String[]{"张三","李四","王五","赵柳"};
String name0 = nameArr[0];
int length = nameArr.length;
- 遍历
String[] nameArr = new String[]{"张三","李四","王五","赵柳"};
String name;
for(int i = 0; i < nameArr.length; i++){
name = nameArr[i];
}
- Arrays工具类
- 数组以字符串输出:toString
int[] arr = {1,2,3,5,4,8,6,3} String str = Arrays.toString(arr);
- 排序:sort
int[] arr = {1,2,3,5,4,8,6,3} Arrays.sort(arr);
4. 数组各数据类型元素的默认值
- 基础数据类型
- 整型
- byte、short、int、long类型的数组,元素默认值为0
- 浮点型
- float、double类型的数组,元素默认值为0.0
- 字符型
- char类型的数组,元素默认值为\u0000
- 布尔型
- boolean类型的数组,元素默认值为false
- 整型
- 引用数据类型
- 引用数据类型在数组,元素的默认值为null
基本数据类型在发生参数传递时,传递的是值
引用数据类型在发生数据传递时,传递的是地址值
5. 数组常见问题
- 数组下标越界异常:ArrayIndexOutOfBoundsException
- 访问了不存在的角标
int[] arr = new int[2]; int i = arr[2];
- 空指针异常:NullPointerException
- 栈中的数组变量没有指向堆内存中的数组实体
int[] arr = null; int i = arr[0];
6. 数组在内存中的创建流程
数组创建1.png
- 在 .class 文件中找到main方法,并把main方法的头加载到方法区中
- 在方法区中寻找main方法的相关信息,把main方法的相关信息加载到栈中,并在栈中为main方法开辟一片区域--栈帧
- int[ ] array = new int[3] 创建一个数组
- int[ ] arr:局部变量 int[] arr 放在栈帧中
- new int[3]:在堆中开辟一片连续的区域存储数组,按照数组长度分为3格,并分配下标;该区域会根据数据类型默认值进行初始化,int类型的默认值为0;创建对象会生成地址值,这个地址值会被赋给局部变量 int[] arr ,有了这个地址值,我们就可以找到堆中的数组
数组创建2.png
- 先通过int[] arr找到堆中数组的地址值,通过地址值找到堆中数组的位置,再通过索引找到数值并再修改
7. 注意事项
- 数组长度在创建时就已经固定,中途无法被改变
- 数组可以根据下标(index)定位元素,下标从左到右,从0开始
- 数组属于引用数据类型
- 数组中的元素必须是同一种数据类型
- 数组中可以有相同元素