Arrays.fill()用于批量填充相同值到数组指定范围,不创建新数组,仅修改原数组;支持全数组或部分范围(左闭右开),对引用类型填入同一对象引用。

Java中Arrays.fill()不是用来“拷贝”数组的,而是用来**批量填充相同值**到数组指定范围内。如果目标是数组拷贝,请用Arrays.copyOf()、System.arraycopy()或clone()——但本篇聚焦Arrays.fill()的正确用法。
Arrays.fill()能做什么
它把一个值写入数组的连续位置,支持所有基本类型和引用类型数组。不创建新数组,只修改原数组内容。
- 填充整个数组:
Arrays.fill(arr, value) - 填充部分范围:
Arrays.fill(arr, fromIndex, toIndex, value)(左闭右开,即包含fromIndex,不包含toIndex) - 对引用类型数组,填入的是同一对象引用(不是深拷贝)
常见使用示例
比如初始化一个长度为5的int数组全为9:
int[] nums = new int[5]; Arrays.fill(nums, 9); // nums变成 [9, 9, 9, 9, 9]
再如只填充中间三个元素:
立即学习“Java免费学习笔记(深入)”;
int[] nums = {1, 2, 3, 4, 5};
Arrays.fill(nums, 1, 4, 0); // 索引1~3(不含4)设为0 → [1, 0, 0, 0, 5]
对对象数组,注意引用共享:
String[] strs = new String[3]; Arrays.fill(strs, "hello"); // 所有元素都指向同一个"hello"字符串对象
容易出错的地方
传参顺序和边界容易搞混:
-
fromIndex必须 ≥ 0,toIndex不能超过数组长度,且fromIndex ≤ toIndex,否则抛IllegalArgumentException - 索引越界(如
toIndex > arr.length)会直接报ArrayIndexOutOfBoundsException - 对二维数组,
Arrays.fill()只能填充一维数组元素(即每行引用),不能递归填充子数组
和数组拷贝的区别要分清
别误用fill()代替拷贝:
- 想复制一份新数组?用
Arrays.copyOf(arr, arr.length) - 想把A数组内容写进已有B数组?用
System.arraycopy(a, 0, b, 0, a.length) - 想浅拷贝对象数组?用
arr.clone() -
fill()只是“写值”,不是“复制数据源”
掌握Arrays.fill()的关键是明确它的定位:快速重置、初始化或批量赋值,不是数据搬运工。


















