数组初始化
数组是相同类型元素的固定长度序列。初始化方式分静态初始化(指定元素)和动态初始化(指定长度)两种。
声明与创建
java
// 先声明后创建
int[] array1;
array1 = new int[5];
// 声明时创建
int[] array2 = new int[5];
// 直接初始化(简化形式)
int[] array3 = {1, 2, 3, 4, 5};
// 使用 new 并初始化
int[] array4 = new int[]{1, 2, 3, 4, 5};静态初始化
数组长度由元素个数决定,创建时直接指定元素值。
java
// 完整形式
int[] arr1 = new int[]{1, 2, 3, 4, 5};
// 简化形式
int[] arr2 = {1, 2, 3, 4, 5};
// String 数组
String[] names = {"张三", "李四", "王五"};
// double 数组
double[] prices = {99.9, 129.9, 159.9};动态初始化
创建时指定数组长度,元素自动获得默认值。
java
int[] arr1 = new int[5]; // 默认值 0
double[] arr2 = new double[3]; // 默认值 0.0
boolean[] arr3 = new boolean[2]; // 默认值 false
String[] arr4 = new String[3]; // 默认值 null默认值对照表:
| 类型 | 默认值 |
|---|---|
| byte/short/int/long | 0 |
| float/double | 0.0 |
| boolean | false |
| char | '\u0000' |
| 引用类型 | null |
二维数组初始化
java
// 静态初始化
int[][] matrix1 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 锯齿数组(每行长度不同)
int[][] jagged = {
{1, 2},
{3, 4, 5, 6},
{7, 8, 9}
};
// 动态初始化
int[][] matrix2 = new int[3][4];
// 只指定行数,每行列数可不同
int[][] jagged2 = new int[3][];
jagged2[0] = new int[2];
jagged2[1] = new int[4];
jagged2[2] = new int[3];长度与索引
java
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length); // 5
// 二维数组
int[][] matrix = new int[3][4];
System.out.println(matrix.length); // 3(行数)
System.out.println(matrix[0].length); // 4(第一行列数)有效索引范围是 0 到 length-1,超出会抛 ArrayIndexOutOfBoundsException。
Arrays 工具类
java
import java.util.Arrays;
// 填充数组
int[] arr1 = new int[5];
Arrays.fill(arr1, 10); // [10, 10, 10, 10, 10]
// 排序
int[] arr2 = {3, 1, 5, 2, 4};
Arrays.sort(arr2); // [1, 2, 3, 4, 5]
// 二分查找(数组必须先排序)
int index = Arrays.binarySearch(arr2, 3); // 2
// 复制
int[] arr3 = Arrays.copyOf(arr2, 10); // 新数组长度 10
int[] arr4 = Arrays.copyOfRange(arr2, 1, 3); // [2, 3]
// 比较
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); // true
// 转字符串
System.out.println(Arrays.toString(arr2)); // [1, 2, 3, 4, 5]注意事项
- 长度不可变:数组创建后长度固定,扩容需要创建新数组
- 索引从 0 开始:最大索引为 length-1
