我不明白为什么变量initialCoordinates
在变化。当我运行程序时,initialCoordinates
会在每次循环后更改值。
int[] initialCoordinates = { 26, 0 };
int[] positions = { 1, 2, 3, 4 };
int[][] coordinates = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
for (int i = 0; i < 4; i++) {
System.out.println("Initial: " + initialCoordinates[1]);
coordinates[i] = initialCoordinates;
coordinates[i][1] += positions[i];
}
答案 0 :(得分:11)
在您的示例中,您将coordinates[i]
设置为initialCoordinates
。
然后在下一行执行coordinates[i][1] = ...
时,就是通过initialCoordinates
间接访问coordinates[i]
并更改initialCoordinates[1]
的值时。
答案 1 :(得分:2)
正如Mark所说,您正在使用initialCoordinates
变量访问coordinates
,因为您是通过引用分配的。这意味着在coordinates [i]=initialCoordinates;
之后,coordinates[i]
将引用与initalCoordinates
相同的内存地址,这样当一个更改时,另一个也会更改。
您可能想要做的是复制值,这将具有按值分配它的效果。您可以使用System.arraycopy(请参见this answer)进行操作。通过按值分配,您可以分配一个单独的内存块来保存coordinates[i]
的值,该值将从initialCoordinates
复制,而不是两个变量都指向内存中的同一对象。
int [] initialCoordinates = {26,0};
int [] positions={1,2,3,4};
int [][] coordinates = {{0,0},{0,0},{0,0},{0,0}};
for(int i=0;i<4;i++){
System.out.println("Initial: "+initialCoordinates[1]);
System.arraycopy(initialCoordinates, 0, coordinates[i], 0, initialCoordinates.length);
coordinates [i][1]+=positions[i];
}
答案 2 :(得分:2)