arrays.fill()是java中初始化数组最直接常用的方法,支持全数组或区间填充基本类型、布尔值、字符串等,对象数组需注意引用共享问题,二维数组需逐行调用。

Java 里设数组初始值,Arrays.fill() 是最直接、最常用的办法——不用写循环,一行搞定,语义清楚,JVM 还做了底层优化。
全数组填充:新建或复用时一键“上色”
适用于刚 new 出来的数组,或想重置已有数组内容的场景:
- 基本类型填非零默认值:比如
int[] buf = new int[1000]; Arrays.fill(buf, -1);表示“未计算”状态 - 布尔数组显式开关:如
boolean[] visited = new boolean[500]; Arrays.fill(visited, false);避免依赖 JVM 默认的false,意图更明确 - 字符串占位安全填字面量:如
String[] names = new String[10]; Arrays.fill(names, "N/A");——填常量字符串没问题,不会引发共享引用问题
区间填充:只动某一段,精准又高效
当只需初始化部分元素(比如 DP 数组前缀、滑动窗口缓冲区),用带索引的重载版本:
- 语法是
Arrays.fill(arr, fromIndex, toIndex, value),区间为左闭右开[fromIndex, toIndex) - 例如:
int[] dp = new int[100]; Arrays.fill(dp, 0, 10, -1);只把前 10 个设为 -1 - 务必确保:
fromIndex ≥ 0、toIndex ≤ arr.length、fromIndex ≤ toIndex,否则抛IllegalArgumentException
对象数组要注意:填的是引用,不是副本
对 String[]、Integer[] 等引用类型数组,fill 填进去的是同一个对象引用:
- 填字面量或不可变对象(如
"OK"、Integer.valueOf(42))是安全的 - 千万别填可变对象实例,比如
Arrays.fill(arr, new ArrayList())——所有元素指向同一实例,改一个全变 - 真需要每个元素是独立对象,得用循环或
Stream.generate()创建
二维数组怎么填:逐行调用 fill 最自然
Arrays.fill() 不支持直接填整个二维数组,但操作很清晰:
- 逐行填充:比如
int[][] matrix = new int[5][5]; for (int[] row : matrix) Arrays.fill(row, 0); - 填不同值也方便:
Arrays.fill(matrix[0], 1); Arrays.fill(matrix[2], 9); - 别试图用
Arrays.fill(matrix, new int[]{0,0,0})——那只是把每行引用都指向同一个一维数组
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











