A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ssx0101 中级黑马   /  2012-10-29 10:43  /  1573 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹自祥 于 2012-11-14 20:20 编辑
  1. import java.util.ArrayList;

  2. public class TextAI {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. User u=new User();
  6. ArrayList<User> al=new ArrayList<User>();
  7. for(int i=1;i<10;i++){
  8. u.setId(i);
  9. al.add(u);
  10. }
  11. for(User u1:al){
  12. System.out.println(u1.getId());
  13. }
  14. }
  15. }
  16. class User{
  17. int id;
  18. String name;
  19. public int getId() {
  20. return id;
  21. }
  22. public void setId(int id) {
  23. this.id = id;
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
复制代码
请写出结果是什么?并说明理由?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

6 个回复

正序浏览
李靖 中级黑马 2012-10-29 19:07:55
7#
arryList数组中放的是User对象,arrayList数组中存放的是User对象的地址引用,当修改User对象的属性时,arrayList数组自然跟着发生变化,因为只有一个对象,所以结果是最后修改后的结果。
回复 使用道具 举报
本帖最后由 曹自祥 于 2012-10-29 14:17 编辑
  1. <FONT color=red>“03.通过在循环外面手动添加一个“u.setId(10);”发现,打印结果变成了9个10. ”</FONT>  应该是10个10。

复制代码
回复 使用道具 举报
  1. /*
  2. 最后打印结果是9个9,为什么是9个9呢?
  3. 通过在循环外面手动添加一个“u.setId(10);”发现,打印结果变成了9个10.
  4. 由此得出虽然for循环是1-9的添加,但是控制的始终是一个User对象而已,
  5. 随着id添加到9,u的id的值打印出来的自然也就全部是9了。

  6. */
  7. import java.util.ArrayList;

  8. public class ArrayListTest
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 // TODO Auto-generated method stub
  13.                 User u=new User();
  14.                 ArrayList<User> al=new ArrayList<User>();
  15.                 for(int i=1;i<10;i++)
  16.                 {
  17.                                 u.setId(i);
  18.                                 al.add(u);
  19.                 }
  20.                 //u.setId(10);
  21.                 //al.add(u);
  22.                 for(User u1:al)
  23.                 {
  24.                         System.out.println(u1.getId()+"..."+u1.getName());
  25.                 }
  26.         }
  27. }
  28. class User
  29. {
  30.         int id;
  31.         String name;
  32.         public int getId()
  33.         {
  34.                 return id;
  35.         }
  36.         public void setId(int id)
  37.         {
  38.                 this.id = id;
  39.         }
  40.         public String getName()
  41.         {
  42.                 return name;
  43.         }
  44.         public void setName(String name)
  45.         {
  46.                 this.name = name;
  47.         }
  48. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
输出必须全部是9
  1. User u=new User();
  2. ArrayList<User> al=new ArrayList<User>();
  3. for(int i=1;i<10;i++){
  4. u.setId(i);//始终是一个对象,知识不停的改变它的ID号而已,最终到9.
  5. al.add(u);
  6. }
  7. for(User u1:al){
  8. System.out.println(u1.getId());
  9. }
复制代码
回复 使用道具 举报
9
9
9
9
9
9
9
9
9
输出结果是 这个,因为循环一次时候你的 i 自增加1 ,在未达到10,就是到9 的时候,然后存入ArrayList中,又循环输出,所以答案就是9个9.

回复 使用道具 举报
全部是9,始终操作的只有u这一个对象!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马