int[] arr = {1,2,3};
)、new
关键字指定长度后循环赋值,或使用Arrays.fill()
批量填充,静态初始化适用于已知元素值,动态初始化则先定义长度再赋值。数组初始化的必要性
在Java中,数组是存储固定数量同类型数据的高效结构。初始化是使用数组前的必备步骤,未初始化的数组会导致NullPointerException
,正确的初始化能确保内存分配和默认值设置,避免运行时错误。
6种数组初始化的详细方法(附代码示例)
1️⃣ 声明时直接赋值(静态初始化)
适用于已知元素值的场景:
// 一维数组 int[] numbers = {1, 2, 3, 4}; String[] names = {"Alice", "Bob"}; // 二维数组 int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
2️⃣ 先声明后赋值(动态初始化)
通过new
关键字指定长度,再单独赋值:
int[] arr = new int[3]; // 长度=3,默认值[0,0,0] arr[0] = 10; arr[1] = 20; arr[2] = 30; String[] strArr = new String[2]; // 默认值[null,null] strArr[1] = "Second"; // 索引1赋值
3️⃣ 默认值初始化
数组创建时自动赋予默认值:
- 整数类型:
0
- 浮点类型:
0
- 布尔类型:
false
- 引用类型:
null
boolean[] flags = new boolean[2]; // [false, false] double[] values = new double[3]; // [0.0, 0.0, 0.0]
4️⃣ 循环批量赋值
高效处理大型数组:
int[] squares = new int[5]; for (int i = 0; i < squares.length; i++) { squares[i] = i * i; // 结果:[0, 1, 4, 9, 16] }
5️⃣ 使用 Arrays.fill()
快速填充
统一设置所有元素的值:
import java.util.Arrays; char[] chars = new char[4]; Arrays.fill(chars, 'A'); // ['A','A','A','A'] // 填充指定区间 [fromIndex, toIndex) Arrays.fill(chars, 1, 3, 'B'); // ['A','B','B','A']
6️⃣ 函数式初始化(Java 8+)
通过生成器函数赋值:
import java.util.Arrays; // 生成索引的平方 int[] seq = Arrays.stream(new int[5]) .map(i -> i * i) .toArray(); // [0,1,4,9,16] // 使用 setAll String[] prefixArr = new String[3]; Arrays.setAll(prefixArr, i -> "ID-" + i); // ["ID-0","ID-1","ID-2"]
✅ 关键注意事项
- 长度不可变:数组一旦初始化,长度固定,需用
ArrayList
实现动态扩容。 - 内存分配:
new
关键字在堆内存分配连续空间。 - 越界检查:索引超出
[0, length-1]
会抛出ArrayIndexOutOfBoundsException
。 - 多维数组:初始化需逐级指定维度,如
int[2][3]
表示2行3列。
如何选择初始化方式?
场景 | 推荐方法 |
---|---|
元素值已知且较少 | 声明时直接赋值({ }) |
长度已知,值需后续计算 | 循环赋值 |
统一填充相同值 | Arrays.fill() |
基于索引的复杂逻辑 | Arrays.setAll() |
依赖默认值(如清零) | new + 默认初始化 |
引用说明:本文代码示例基于Oracle官方Java 17规范,方法参考《Java核心技术卷I》及Java Arrays文档,实践建议遵循Effective Java最佳实践。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/13773.html