java一维数组初始化只有静态初始化和动态初始化两种本质方式:静态初始化适用于编译期已知全部元素的场景,如配置项、常量列表;动态初始化适用于运行时确定长度或逐个计算值的场景,需用new分配空间。

Java 一维数组初始化只有两种本质方式:静态初始化(声明时直接赋值)和动态初始化(先用 new 分配空间)。选哪种,取决于你是否在编译期就已知全部元素内容,以及运行时是否需要灵活控制长度或逐个计算值。
静态初始化:适合已知全部元素的场景
适用于配置项、常量列表、测试数据等编译期确定内容的情况。JVM 自动推导类型和长度,简洁且不可拆分。
-
标准写法:
int[] scores = {85, 92, 78, 96};或String[] days = {"Mon", "Tue", "Wed"}; -
等价形式(可用于方法传参):
process(new int[]{1, 2, 3}); -
禁止写法:
int[] arr; arr = {1, 2, 3};—— 编译报错,因为{}只能在声明语句中使用
动态初始化:适合运行时才确定长度或值的场景
当数组长度来自变量、用户输入或计算结果,或元素需后续读取、循环生成时,必须用 new 显式分配空间。
-
基本类型自动设默认值:
int[] flags = new int[10];→ 全为0;boolean[] done = new boolean[5];→ 全为false -
引用类型元素为 null:
String[] names = new String[4];→ 每个元素是null,访问前需判空或显式赋值,否则调用方法会触发NullPointerException -
长度支持变量:
int n = getUserCount(); String[] users = new String[n];✅ 合法
高效填充:Arrays.fill() 的正确打开方式
它不是万能构造工具,而是专为“同值覆盖”设计的语义化操作,尤其适合重置、批量设默认值。
-
一维数组安全使用:
int[] arr = new int[100]; Arrays.fill(arr, -1);→ 所有元素变-1 -
局部填充(开区间):
Arrays.fill(arr, 3, 8, 0);→ 索引 3 到 7(含)设为0 -
对象数组要小心:
List<string>[] lists = new ArrayList[3]; Arrays.fill(lists, new ArrayList());</string>→ 三个索引指向同一个实例,应改用循环或Stream.generate(() -> new ArrayList()).toArray(List[]::new)
final 数组:引用不变 ≠ 内容不变
用 final 修饰数组变量,只锁定该变量所指向的内存地址,不阻止修改其中元素。
-
final int[] a = {1, 2, 3}; a[0] = 99;✅ 合法,数组内容可变 -
a = new int[]{4, 5, 6};❌ 编译错误,引用不可重新赋值 - 若需真正不可变,应封装为不可变集合(如
Arrays.asList(a).toArray()后用Collections.unmodifiableList包裹),或自定义只读包装类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











