package andycpp;
import org.junit.Test;
public class TestIterator {
//面试题
@Test
public void testFor2(){
String [] str = new String []{"AA","BB","DD"};
for(int i=0;i<str.length;i++){
str[i] = i+"";
}
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
}
}
输出
0
1
2
通过遍历的方式把每个值给修改了,导致最终的值变了 调用的就是str的值
再看下面
package andycpp;
import org.junit.Test;
public class TestIterator {
//面试题
@Test
public void testFor3(){
String [] str = new String []{"AA","BB","DD"};
for(String s:str){
s= "MM"; //此处的s是新定义的局部变量
System.out.println(s);
}
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
}
}
输出
MM
MM
MM
AA
BB
DD
而这个里面s是个局部变量,每次从str中取一个元素赋给s,s又是新定义的一个变量,赋给s之后,s的值又给改成MM,并没有影响本身str的值。