把数据库查询的结果集,添加到List中,输出后为什么所有的内容都一样?

public static void main(String[] args) {
        Connection conn =null;
        Statement st =null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        List<user> userList=new ArrayList<user>(); //user表集合  
        user user=new user();                                  //user表domain
        try {
            conn = jdbcTest.getConnection();
             st = conn.createStatement();
            ps = conn.prepareStatement("select * from user");
            rs = ps.executeQuery();
            while(rs.next()) {           //通过循环把结果集,添加到user,再添加到userList中
            user.setName(rs.getString(1));
            System.out.print(rs.getString(1)+"   ");   //查看添加的数据
            user.setPwd(rs.getString(2));
            System.out.println(rs.getString(2));
            userList.add(user);                                 //添加到userList
            }
            System.out.println(userList);                 //输出userList
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            jdbcTest.close(conn, st, null);
        }
    }


下面是结果:
zhang0 mima0
zhang1 mima1
zhang2 mima2
zhang3 mima3
zhang4 mima4
zhang5 mima5
zhang6 mima6
zhang7 mima7
zhang8 mima8
zhang9 mima9
zhang10 mima10
zhang11 mima11
zhang12 mima12
zhang13 mima13
zhang14 mima14
zhang15 mima15
zhang16 mima16
zhang17 mima17
zhang18 mima18
zhang19 mima19

[user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
, user [name=zhang19, pwd=mima19]
]

已经解决,出现这种情况的原因,是把同一个地址的user,打印了20边,因为在循环体外,声明的user对象,在循环体中每次添加的都是同一个地址的user;
把uesr的声明添加到循环体中,每次循环都声明一个新的user并添加到List集合

while(rs.next()) {     //通过循环把结果集,添加到user,再添加到userList中
            user user=new user();       
            user.setName(rs.getString(1));
            System.out.print(rs.getString(1)+"   ");   //查看添加的数据
            user.setPwd(rs.getString(2));
            System.out.println(rs.getString(2));
            userList.add(user);                                 //添加到userList
            }

参考源自:https://blog.csdn.net/xiaoshidetaikuai20/article/details/48550329
非常感谢

图片说明
把User的创建挪到循环内部去,你现在在list里添加的都是同一个user对象的引用!
图片说明