Joe520Kay 2017-01-17 08:52 采纳率: 0%
浏览 3591

for each循环变量赋值问题

对于普通类型来讲

 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被改变了。
这是为什么呢?

  • 写回答

8条回答 默认 最新

  • upgraded123 2017-01-17 09:23
    关注

    我也是小白,我觉得遍历第一段代码你没有add进去,没添加就没保存了,直接添加可能有问题,第二段明显put到对象当中了

    评论

报告相同问题?

悬赏问题

  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline