对于普通类型来讲
public void test() {
List<String> strList = new ArrayList<String>();
strList.add("乐视网");
strList.add("财经网");
strList.add("凤凰网");
for(String str:strList){
if("乐视网".equals(str)){
str = "腾讯网";
}
}
System.out.println(strList);
}
这段代码输出的结果是: [乐视网, 财经网, 凤凰网]
可见循环计数器只是一个中间变量,它仅仅保存了当前正在遍历的集合元素,因此对其赋值并不会改变集合元素本身。
但是,对于map、对象类型来讲
public void test() {
List<Map<String,Object>> stringList = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String, Object>();
map.put("leshi", "乐视网");
map.put("caijing", "财经网");
map.put("fenghuang", "凤凰网");
stringList.add(map);
for(Map<String,Object> m:stringList){
if("乐视网".equals(m.get("leshi"))){
m.put("leshi", "乐视体育");
}
}
System.out.println(stringList);
}
这段代码输出的结果则为: [{fenghuang=凤凰网, caijing=财经网, leshi=乐视体育}]
显然原来的map的value被改变了。
这是为什么呢?