在 Java 中,**数组(Array)**是一种用于存储多个相同类型数据元素的容器。你可以把它想象成现实生活中的车库或一排相连的储物柜,它把有限个类型相同的变量用一个统一的名字命名,并通过编号(下标)来区分它们。
数组是 Java 中最基础且非常重要的数据结构,掌握它是学习集合和算法的前置内容。以下是关于 Java 数组的核心特性与使用要点:
1. 核心特点
- 元素类型相同:数组中存放的所有元素必须属于同一种数据类型(如全是整数或全是字符串)。
- 内存空间连续:数组在内存中是一段连续的空间,支持通过下标进行快速的随机访问。
- 长度固定:数组一旦创建,其长度就不可改变。如果需要更多空间,只能新建一个更大的数组并将原数据复制过去。
- 下标从 0 开始:数组元素的索引从
0开始,到数组长度 - 1结束。如果访问超出此范围,会抛出ArrayIndexOutOfBoundsException异常。
2. 声明与初始化方式
Java 中创建和使用数组通常有以下几种方式:
- 动态初始化(先指定长度,后续赋值):
int[]arr=newint[5];// 创建一个长度为5的整型数组 - 静态初始化完整版(直接指定内容):
int[]arr=newint[]{1,2,3,4}; - 静态初始化简写版(声明与赋值必须在同一行):
int[]arr={1,2,3,4};
(注:Java 也支持int arr[];这种将方括号放在变量名后的写法,但官方更推荐int[] arr;的标准格式)
3. 默认值规则
当数组被动态创建但未显式赋值时,JVM 会自动为其赋予对应类型的默认值:
- 数值类型(byte/short/int/long):
0 - 浮点类型(float/double):
0.0 - 布尔类型(boolean):
false - 字符类型(char):
\u0000(空字符) - 引用类型(如 String、Object 等):
null
4. 常见操作
- 获取长度:通过
数组名.length属性获取数组的元素个数。 - 遍历元素:可以使用传统的
for循环配合下标遍历,也可以使用增强型for-each循环(如for(int num : arr))。 - 排序:日常开发中无需手写冒泡或选择排序,直接使用工具类
Arrays.sort(arr)即可高效完成排序。
5. 底层内存原理
在 JVM 内存模型中,数组对象本身存储在**堆内存(Heap)中,而我们在方法中定义的数组变量(如arr)则存储在栈内存(Stack)**中。栈中的变量实际上保存的是数组在堆中的首地址(引用)。这意味着当你把一个数组变量赋值给另一个变量时(如int[] b = a;),传递的是内存地址,修改其中一个数组的元素,另一个也会同步发生改变。