日期:2014-05-20  浏览次数:20826 次

關於ArrayList的一個匪夷所思的問題!!!!
今天遇到了個問題,希望高人給解釋一下。


/**
  *   @(#)ListAddTest.java
  *
  *
  *   @author   Administrator
  *   @version   1.00   2007/5/8
  */
import   java.util.ArrayList;

class   Book{

private   String   id   =   " ";
private   String   name   =   " ";

public   void   setid(String   id){
this.id   =   id;
}
public   String   getid(){
return   this.id;
}
public   void   setname(String   name){
this.name   =   name;
}
public   String   getname(){
return   this.name;
}
}

public   class   ListAddTest   {

        public   ListAddTest()   {
        }

        public   static   void   main(String[]   args)   {

                ListAddTest   listAddTest   =   new   ListAddTest();
                ArrayList <Book>   list   =   new   ArrayList <Book> ();

                Book   book   =   new   Book();
                book.setid( "001 ");
                book.setname( "abc ");
                list.add(book);

                book.setid( "002 ");
                book.setname( "def ");
                list.add(book);

                for(int   i=0;   i <list.size();   i++){

                System.out.println( "******     id     ******: "   +   list.get(i).getid());
                System.out.println( "******   name   ******: "   +   list.get(i).getname());
                System.out.println( " ");
                }
        }
}

結果:
******     id     ******:002
******   name   ******:def

******     id     ******:002
******   name   ******:def

問題:
我知道上面的代碼有問題,還需要一個new   Book();
可是我只作了一次Book   book   =   new   Book();
為什麼list裡有兩條數據。

我期望上面程序運行出來的結果是:
******     id     ******:002
******   name   ******:def
只县示一條數據,即第二个book。

------解决方案--------------------
晕,add了两次,当然两个了
------解决方案--------------------
两个都refer to同一个Book instance.
------解决方案--------------------
List 里面都有两个数据了,当然显示两条,哎!!