zoukankan      html  css  js  c++  java
  • ArrayList的值出现覆盖问题

    public class User {
        private int id;
        private String name;
        public User(){
            
        }
        public User(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
    }
    public class User1 {
        private int id;
        private String name;
        public User(){
            
        }
        public User(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
    }
    public class Demo01 {
        public static void main(String[] args) {
               
            List<User>user_list = new ArrayList<User>();
            user_list.add(new User(1,"a"));
            user_list.add(new User(2,"b"));
            user_list.add(new User(3,"c"));
            
            List<User1>user1_list = new ArrayList<User1>();
            User1 user1 = new User1();
            for (User user : user_list) {
                user1.setId(user.getId());
                user1.setName(user.getName());
                user1_list.add(user1);
            }
            
            for (User1 u : user1_list) {
                System.out.print(u.getName());
            }
                   
        }
    }

    输出 : c c c

          以上代码想把user_list集合的值保存到user1_list集合中,但是发现输出的值都是 c,原因是在for循环外面创建user1对象,所以三次遍历都是操作一个实例对象。至于user1_list中保存的的为什么都是c,这个问题我也纠结了好久,是一开始添加的就是c,还是被覆盖成c,debug一下:

     当foreach第一次遍历时,user1_list集合的长度为1,保存了一个name为a的对象。

    ==============================================================

    当foreach第二次遍历时,user1_list集合的长度为2,保存了两个name为b的对象。

    =============================================================

    当foreach第三次遍历时,user1_list集合的长度为3,保存了三个name为c的对象。

    可以看出每次遍历,ArrayList都会覆盖之前保存的值,因为只创建了一个对象实例,不可能保存三个不同对象,只能选择覆盖之前保存的对象

  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/sflik/p/4822179.html
Copyright © 2011-2022 走看看