程序如下
import org.junit.Test;
public class TestForeach {
@Test
public void test1(){
int[] arr = new int[5];//arr[0]=0
for(int num : arr){
num = 1;
}
System.out.println(arr[0]);
}
}
结果是0,为什么?num=1不是赋值了吗?为什么不是1啊?
解答:原来for(int num:arr)的动作是取出arr数组内容赋值给num,处理后再取出下一个arr值赋给num。那么num=1只是将num赋值为1而不是将1赋值给arr。这个过程同国debug可以清楚的观察到num从0变到1再变回0。我想之所以会拐不过弯是因为混入了指针的想法。