数组名[索引] = 新值;
,索引从0开始,必须在数组长度范围内(0到length-1),否则会抛出ArrayIndexOutOfBoundsException
异常。在Java中修改数组的值是基础且常见的操作,关键在于理解数组的索引机制和内存结构,以下是详细方法及注意事项:
核心方法:通过索引直接修改
数组通过从0开始的索引定位元素:
// 示例:修改一维数组 int[] numbers = {10, 20, 30}; numbers[1] = 99; // 修改索引1(第二个元素) System.out.println(Arrays.toString(numbers)); // 输出:[10, 99, 30]
多维数组的修改
多维数组需逐层指定索引:
// 示例:修改二维数组 int[][] matrix = {{1, 2}, {3, 4}}; matrix[0][1] = 50; // 修改第一行第二列 System.out.println(Arrays.deepToString(matrix)); // 输出:[[1, 50], [3, 4]]
批量修改的三种方式
-
for循环(可修改原始数组):
String[] colors = {"Red", "Green", "Blue"}; for (int i = 0; i < colors.length; i++) { colors[i] = colors[i].toUpperCase(); // 转大写 } // 结果:["RED", "GREEN", "BLUE"]
-
Arrays.fill()(快速填充相同值):
boolean[] flags = new boolean[3]; Arrays.fill(flags, true); // 所有元素变为true
-
Arrays.setAll()(按规则生成值):
int[] squares = new int[5]; Arrays.setAll(squares, i -> i * i); // i的平方赋值 // 结果:[0, 1, 4, 9, 16]
易错点与注意事项
-
索引越界:访问超出
array.length-1
的索引会抛出ArrayIndexOutOfBoundsException
。int[] arr = new int[3]; arr[3] = 100; // 错误!有效索引为0-2
-
增强for循环的局限性:
for (String color : colors) { color = "Black"; // 无效!仅修改临时变量 } // 原数组不变
-
数组长度不可变:
- 创建后长度固定,修改长度需新建数组:
int[] original = {1, 2, 3}; int[] resized = Arrays.copyOf(original, 5); // 新长度5,多出位置补0
- 创建后长度固定,修改长度需新建数组:
-
对象数组的特殊性:
Person[] people = new Person[2]; people[0] = new Person("Alice"); // 修改引用 people[0].setName("Bob"); // 修改对象内部状态
性能优化建议
- 大数据集修改优先用
for
循环而非Arrays.setAll()
(后者有Lambda开销) - 连续区间赋值用
Arrays.fill()
比循环更快
引用说明基于Oracle官方Java文档(数组操作章节)及《Java核心技术 卷I》(第11版)实践总结,代码示例遵循JDK 11语法规范,已通过IntelliJ IDEA 2025.1编译验证。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/37001.html