1.需求:遇到一个需要填充二维数组的问题,查询自资料发现不能一次性填充,需要使用如下方法:
int[][] arr = new int[3][5];
int[] fillArr = new int[5];
Arrays.fill(fillArr,-1);
Arrays.fill(arr,fillArr);
2.例子:然后修改arr的一个值的时候发现其他同一列的值全部修改为同样的值,例如:
public static void main(String[] args){
int[][] arr = new int[3][5];
int[] fillArr = new int[5];
Arrays.fill(fillArr,-1);
Arrays.fill(arr,fillArr);
System.out.println("fill()方法填充后:");
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
for(int i=0;i<5;i++){
arr[1][i] = i+1; //修改引用类型fillArr的数据,导致arr所有数据都被修改了
}
System.out.println("修改arr后:");
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
输出结果为:
fill()方法填充后:
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
修改arr后:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
这是一个修改了引用类型(本例为数组值)的值后所有指向本引用的值全部修改。导致这个问题的发生。
3.解决办法:
(1)采用多重for循环赋值给多维数组。