`

list.add(user)的问题

SQL 
阅读更多
  1. publicstaticList<User>getUsers()
  2. {
  3. Connectionconn=DB.getConn();
  4. List<User>list=newArrayList<User>();
  5. Stringsql="select*fromuser";
  6. ResultSetrs=DB.executeQuery(conn,sql);
  7. try
  8. {
  9. while(rs.next())
  10. {
  11. Useru=newUser();//此处的语句不能放在while外面,,否则list中放的都只是最后一条的记录
  12. u.setId(rs.getInt("id"));
  13. u.setUsername(rs.getString("username"));
  14. u.setPassword(rs.getString("password"));
  15. u.setPhone(rs.getString("phone"));
  16. u.setAddr(rs.getString("addr"));
  17. u.setRDate(rs.getTimestamp("rdate"));
  18. list.add(u);
  19. }
  20. }
  21. catch(SQLExceptione)
  22. {
  23. e.printStackTrace();
  24. }
  25. finally
  26. {
  27. DB.closeRs(rs);
  28. DB.closeConn(conn);
  29. }
  30. returnlist;
  31. }



老师,为什么User u = new User(); 这句话放在循环体外,再从list中读数据时,假设数据库中有三条记录,它取出的是三条相同的记录,且都是最后一条记录呢??为什么放入到的循环体内就正常了呢???

瓣瓣(503398720) 22:07:16
放在外边的话 相当于list中只放了一个user 当然结果集的最后一条 就是封装数据的这个user
瓣瓣(503398720) 22:08:58
User u = new User(); 把它放在循环里的话 就是每次进入循环体 都会新建一个user对象 每个user封装不同的数据 就正常了
双东女青(82853546) 22:10:08
在循环体外,当然是相同的对象了
双东女青(82853546) 22:10:54
只有放在里面,才倒每走一次循环,实例化一个对象
大块头(305347899) 22:12:01
意思是说如果放在外面的话只循环一次???
大块头(305347899) 22:12:22
两位两解释一下
双东女青(82853546) 22:13:42
循环了三次,不过只实例化了一个 use对象
大块头(305347899) 22:14:34
但照我的理解,,虽然用的是同一个user但它们的内容是不一样的啊.....何况为什么list中第一条数据就是数据库中的第一条数据了
双东女青(82853546) 22:15:14
内容是不一样,每循环一次,后一次覆盖了前一次的值
双东女青(82853546) 22:15:28
所以才会返回的结果是三条一样的
大块头(305347899) 22:15:41
但它每一次都add了啊??
双东女青(82853546) 22:19:47
list.add加的是同一个对象呀
大块头(305347899) 22:20:15
你 们是说.它每一次add的时候相当于是指向了u的内容,但u的内容到结束循环的时候已经变成了最后一条的记录的内容,所以list中的每一个记录都是指向 u这个对象,而此时u的内容已经是最后一条记录的内容了,所以list中的每一条数据的内容都是最后一条记录中的内容,,是这样的意思吗?
双东女青(82853546) 22:20:23
对象的值由于变化而造成list中的记录是一样的,是同一对象
双东女青(82853546) 22:20:59
是的
双东女青(82853546) 22:21:09
因为这个list中同一个对象
双东女青(82853546) 22:21:39
对象由于循环而改变成了最后一条记录的值,所以就是这样子了
双东女青(82853546) 22:22:18
在循环体内的话,就是每次循环都生成了一个新的对象。
大块头(305347899) 22:22:34
原来如此
双东女青(82853546) 22:22:40
list中加入的就是三个对象了噻。。
大块头(305347899) 22:23:21
谢谢了


相当于加入的是同一个人,虽然它的衣服每循环一次,就变一次,并且list中都增加一个人,但因为是同一个人,它们的值都是一样的,所以到最后是最后一条的记录,且每一个都是相同的内容
分享到:
评论

相关推荐

    Linux源码List.h文件详细分析(链表、队列、堆栈、哈希表等)

    static inline void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next) { next-&gt;prev = new; new-&gt;next = next; new-&gt;prev = prev; prev-&gt;next = new; } static inline void...

    北大青鸟第二单元项目

    return super.executeSql(sql, user.getUsername(),user.getSex(),user.getAge(),user.getTellphone(),user.getAddress(),user.getPermission(),user.getPassword(),user.getUserno()); } //删除 public ...

    java8如何通过Lambda处理List集合

    List&lt;User&gt; filteredList = userList.stream().filter(user -&gt; user.getAge() &gt; 25).collect(Collectors.toList()); System.out.println(filteredList); ``` 在上面的例子中,我们使用 `stream()` 方法将 List 集合...

    android mars视频代码 Tea_marsListActivity

    list.add(map1); list.add(map2); list.add(map3); SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.users, new String[]{"user_name","user_ip"}, new int[]{R.id.user_name,R.id.user_ip})...

    GENESIS 2000 DFM PE

    to add custom features to the system immediately, as and when required, without having to wait for the R&D department to deliver. These customized features are not added on as scripts to be ...

    Criteria使用技巧

    这里,`User.class`是我们的实体类,`Criteria`对象就是我们进行查询的基础。 #### 三、基本查询 1. **等值查询**:通过`add()`方法和`Expression.eq()`表达式实现等值查询。 ```java criteria.add(Expression....

    DataTable 手动创建数据源 newdtb.pdf

    private void Bind_List2... newdtb.Columns.Add("update_user", typeof(string)); newdtb.Columns.Add("update_date", typeof(string)); newdtb.Columns["Id"].AutoIncrement = true; for (int i = 1; i ; i++) {

    Laraboot: Laravel 5 For Beginners

    Laravel 5.2 初学者指南 Laraboot: Laravel 5 For Beginners Bill Keck ...This version was published on 2016-04-04 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing ...

    基于elasticsearch的CRUD简单封装java版

    users.add(user); UserM user2 = new UserM("王大姐", 30); users.add(user2); UserM user3 = new UserM("王小二", 25); users.add(user3); int count = service.saveDatas(users); System.out....

    用OWC11 开发的Chart的一个userControl

    只要把这个userControl添加到你的website里就可以用了。示例代码: chart1.dataSource = 此处为一个Table。 chart1.Title = "IHC Notebook Products /VPM PSG Team Level of Availablity %(LOS)"; chart1.Caption_...

    C++2005调用C#Webservice接口返回值为List

    Users.Add(user1); Users.Add(user2); Users.Add(user3); Users.Add(user4); Users.Add(user5); return Users; } ``` 四、C++2005调用C#Webservice接口返回值为List的实现 在C++2005中,使用CService对象调用...

    using System;using System;using System;

    using (RegistryKey subKey = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Applets\Paint\Recent File List")) { foreach (string mru in subKey.GetValueNames()) { ...

    json与JavaBean、Map和list之间的转换问题.doc

    JSON 与 JavaBean、Map 和 List 之间的转换问题 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。在 Java 开发中,经常需要将 JSON 数据与 JavaBean、Map ...

    List中保存对象,按对象中某一属性排序【含程序源码】

    userList.add(new User("Spike", 20)); // 自定义比较器,根据age属性排序 Collections.sort(userList, new Comparator&lt;User&gt;() { @Override public int compare(User u1, User u2) { return Integer.compare...

    Microsoft.AspNet.SignalR.2.4.0 Microsoft.AspNet.SignalR.Core.2.4.0

    Clients.Client(user.ContextId).addMessage("电脑说:" + e.参一+ e.参二, user.ContextId); } } else if (e.类型 == 目的事件类型.学习 || e.类型 == 目的事件类型.认知) { Clients.Client(user.ContextId)....

    ResultSet转化为json,json转化为List

    user.setName(resultSet.getString("name")); user.setAge(resultSet.getInt("age")); userList.add(user); } ``` 4. 将List&lt;User&gt;转换为JSON字符串: 使用Jackson的ObjectMapper进行转换: ```java ...

    java QBC常用方法

    Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.eq("username", "admin")); List&lt;User&gt; users = criteria.list(); ``` - **应用场景**:当需要根据一个确定的值查询记录时...

    Java Web程序实现返回JSON字符串的方法总结

    user.getTels().add("1234444556677"); user.getTels().add("6893493458585"); map.put("user", user); JSONObject json = new JSONObject(map); System.out.println(json.toString()); } ``` 在上面的...

    android Gson转换List集合demo

    user.setAge(Math.round(json.getAsJsonObject().get("age").getAsFloat())); return user; } @Override public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) { ...

    Clever Internet Suite CIS (Src) v8.2.801.0 2015-12-23.zip

    2. **EULA.txt**:这是End User License Agreement(最终用户许可协议)的文本文件,详细列出了软件的使用条款和限制,用户在使用该软件前必须同意这些条款。 3. **Demos**:这个目录可能包含了多个示例项目,展示...

Global site tag (gtag.js) - Google Analytics