为什么int矩阵不是不变的?
我的印象是,原始数据值是不可变的,因此无法更改(重点是增强的for循环),这解释了为什么这段代码不能按预期工作:
//Not Mutable Primitaves
int[] arr = new int[4];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
for(int i : arr){
i = i*2;
}
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + ",");
}
System.out.print("\n");
该代码继续打印1,2,3,4,与乘法器无关。但在这段代码中,增强的for循环实际上修改了原始矩阵,但我不知道为什么
public static void changeArr(int[] arr, int mult){
for(int i = 0; i < arr.length; i++){
arr[i] = arr[i] * mult;
}
}
public static void main(){
int[][] matrix = new int [3][3];
for (int i = 0; i<matrix.length; i++){
for (int j = 0; j<matrix[i].length; j++){
matrix[i][j] = i;
}
}
for (int[] row : matrix){
changeArr(row, 1);
}
for (int i = 0; i<matrix.length; i++){
for (int j = 0; j<matrix[i].length; j++){
System.out.print(matrix[i][j] + ",");
}
System.out.print("\n");
}
}
有人能解释一下为什么这适用于矩阵而不是数组吗
编辑 执行arr[i]会使程序崩溃,其值如下:
arr[0] = 1243;
arr[1] = 21;
arr[2] = 354;
arr[3] = 4123;
# 1 楼答案
相当于
。。。正如你所见,这一点都不起作用。相比之下,对于二维数组,你得到的是
这是因为
row
是对同一对象的引用如果您试图设置
row = newRow
,这同样不会起任何作用,但您可以很好地修改行的内容对循环使用普通索引,一切都会正常工作