java一维数组赋初始值只有静态初始化和动态初始化两种本质方式:前者声明时直接赋值,后者先new分配空间再处理;其他写法均为二者变体,底层逻辑不变。

Java 一维数组赋初始值只有两种本质方式:静态初始化(声明时直接给值)和动态初始化(先用 new 分配空间,再填值或依赖默认值)。其他写法都是这两种的语法变体,底层逻辑不变。
静态初始化:声明即赋值
适用于编译期已知全部元素内容的场景。JVM 会自动推导类型和长度,不能拆成两步。
-
正确写法:
int[] arr = {1, 2, 3};或String[] names = {"Alice", "Bob"}; -
等价形式:
int[] arr = new int[]{1, 2, 3};—— 这是匿名数组字面量,可用于方法传参或变量赋值 -
常见错误:
int[] arr; arr = {1, 2, 3};编译不通过,因为{}只能在声明语句中使用
动态初始化:先分配空间再处理
适合运行时才确定长度,或元素值需后续计算、读取、用户输入等场景。数组创建后,元素自动设为默认值。
- 基本类型默认值:int → 0,double → 0.0,boolean → false
-
引用类型默认值:String[]、Object[] 等 → 每个元素为
null -
典型用法:
int[] data = new int[5];创建含 5 个 0 的数组;String[] words = new String[3];创建含 3 个null的数组 -
后续赋值:可用循环、Scanner 输入、或直接索引赋值,如
data[0] = 10;
结合 final 使用的注意事项
用 final 声明数组变量,约束的是“引用不可变”,不是“内容不可变”。
-
final int[] a = {1, 2, 3};✅ 合法:a 永远指向这个数组,但a[0] = 99;允许 -
final int[] b; b = new int[3];✅ 合法,但必须在构造器或实例初始化块中完成赋值,否则编译报错 - 想让数组内容也不可变,需配合不可变集合(如
Arrays.asList(...).toArray()后封装)或自定义封装类
字符串数组与包装类数组的细节
String 和 Integer 等引用类型数组,new 出来后元素默认为 null,访问前务必检查或显式初始化。
-
String[] s = new String[2]; System.out.println(s[0]);输出null,不会报错 -
s[0].length();会触发NullPointerException,需先赋值如s[0] = "hello"; -
Integer[] nums = new Integer[3]; nums[0] = 123;自动装箱,合法;但nums[1]仍是null
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











