• List,add添加对象,属性值都为最后添加的参数


    问题:

    List<People> peopleList = new ArrayList();
    People people = new People();
    for(int i = 0 ; i < 10 ; i++){
        people.setId("id" + i);
        people.setAge("age" + i);
        peopleList.add(people);
    }
    //输出结果都是 
    //id10
    //age10
    sout(peopleList);
    

    原因

    问题的产生在于,对象。对象中保存的都是地址
    People 对象在循环前,便新建成功,分配了内存空间,不再发生变化。
    每次赋值的过程,都是在同一个内存空间,更改保存的地址。

    peopleList.add(people);
    //其中,List 中保存的是,people 这个对象。
    
    //在循环赋值的过程中,people 中的保存的值(所指向的地址)一直在发生变化。
    for(int i = 0 ; i < 10 ; i++){
        people.setId("id" + i);
        people.setAge("age" + i);
    }
    

    所以最后存入 List 中的对象,都是最后输入的属性

    正确的做法

    List<People> peopleList = new ArrayList();
    
    for(int i = 0 ; i < 10 ; i++){
        //将对象的定义放在循环里,每次都是一个新的对象
        People people = new People();
        people.setId("id" + i);
        people.setAge("age" + i);
        peopleList.add(people);
    }
    sout(peopleList);
    

    此时,每次循环都会新建一个对象,分配一个新的内存空间

  • 相关阅读:
    2018年春季个人阅读计划
    软件需求我们需要做到什么
    开发日志03
    开发日志02
    开发日志01
    软件需求模式阅读笔记2
    2020/2/11-Python学习计划
    2020/2/10-Python学习计划
    2020/2/9-Python学习计划
    2020/2/8-Python学习计划
  • 原文地址:https://www.cnblogs.com/Kevin-QAQ/p/13638445.html
Copyright © 2020-2023  润新知