前几天和一个同事关于一个议题产生了疑虑:Java中对于集合类迭代变量的修改是否会影响原集合。
有的书中信誓旦旦的说,修改集合类的迭代变量是毫无意义的,比如李刚的《疯狂Java讲义》;而同事反馈说,在实际编程时,修改了迭代变量发现原集合也变了。
那么修改迭代变量到底会不会影响原集合呢?
当时我的第一反应是,这可能和传值/传引用有关,他们说的可能不是一个东西。周末稍微有点空闲,就仔细琢磨了下这个问题。
首先我们来看一段代码
import java.util.List;
import java.util.ArrayList;
public class Test1{
public static void main(String[] args){
List<String> books = new ArrayList<String>();
books.add("Crazy Java");
books.add("Head First Python");
books.add("Coding with me");
//第一次输出,输出修改迭代变量前的集合
System.out.println(books);
for (String book : books){
book = "test";
}
//第二次输出,输出修改迭代变量后的集合
System.out.println(books);
}
}
程序运行结果如下:
两次输出结果一致,修改迭代变量后,集合内