在使用ArrayList时遇到一个比较奇怪的问题,下面是这段代码:
   javacode:
         //定义模拟出荷物CD信息List
ArrayList<shukkabutsuCd> shukkabutsuCdList = new ArrayList<shukkabutsuCd>();
shukkabutsuCd shukkabutsu = new shukkabutsuCd();
//情况1:出荷物情报中全部不为空
shukkabutsu.setShukkabutsuCd("S001");
        shukkabutsu.setProdctCd("版本A");
        shukkabutsu.setProdctVrsn("V1.1");
        shukkabutsu.setHimmokuCd("品目A");
        shukkabutsu.setHimmokuVrsn("V1.1");
        shukkabutsu.setOsCd("A");
        shukkabutsuCdList.add(shukkabutsu);
        //情况2:出荷物情报中产品部分为空
         shukkabutsu.setShukkabutsuCd("S002");
        shukkabutsu.setProdctCd(null);
        shukkabutsu.setProdctVrsn(null);
        shukkabutsu.setHimmokuCd("品目A");
        shukkabutsu.setHimmokuVrsn("V1.1");
        shukkabutsu.setOsCd("A");
        shukkabutsuCdList.add(shukkabutsu);
  上面的javacode中,shukkabutsuCd为一个javabean;这段代码执行后shukkabutsuCdList中并没有出现我想得到的数据,而是出现了2条第二种情况的数据。
  百思不得其解,不知道哪位可以解释下。

解决方案 »

  1.   

    你只有一个对象,你第二次的把第一个覆盖了,但是LIST里装了2个引用
      

  2.   

    因为你操作的是同一个对象
    //情况1:出荷物情报中全部不为空 
    shukkabutsu.setShukkabutsuCd("S001"); 
            shukkabutsu.setProdctCd("版本A"); 
            shukkabutsu.setProdctVrsn("V1.1"); 
            shukkabutsu.setHimmokuCd("品目A"); 
            shukkabutsu.setHimmokuVrsn("V1.1"); 
            shukkabutsu.setOsCd("A"); 
            shukkabutsuCdList.add(shukkabutsu); 
            //情况2:出荷物情报中产品部分为空 
             shukkabutsu = new shukkabutsuCd();//加上这句
             shukkabutsu.setShukkabutsuCd("S002"); 
            shukkabutsu.setProdctCd(null); 
            shukkabutsu.setProdctVrsn(null); 
            shukkabutsu.setHimmokuCd("品目A"); 
            shukkabutsu.setHimmokuVrsn("V1.1"); 
            shukkabutsu.setOsCd("A"); 
            shukkabutsuCdList.add(shukkabutsu); 
      

  3.   


    你在添加第二条记录的前,加上
    shukkabutsu = new shukkabutsuCd(); 
    新建一个对象,加入到ArrayList中
      

  4.   

    答:在 //情况2:出荷物情报中产品部分为空 
    之后,加上如下一条语句:
    shukkabutsu = new shukkabutsuCd(); 
      

  5.   

    我晕,你的第二个对象把第一个给覆盖了,所以就找不到了啊
    你在第二次装载的时候你可以从新new一个对象,然后装载数据,明白吗?
      

  6.   

    shukkabutsu = new shukkabutsuCd();//加上这句
    第二个把第一个给覆盖了。
      

  7.   

    可以算是List封装对象的典型错误咩...
      

  8.   

    先定义一个shukkabutsuCd ;把1号数值SET进去
    然后在定义一个shukkabutsuCd;把2号数值SET进去;
    你的做法只是定义了一个shukkabutsuCd ;所以在你SET 1进去之后 又SET 2进去,1 就会被覆盖了咩...
      

  9.   

      刚学java没多久,谢谢楼上的各位。按照你们的方法已经解决了那个问题!
      不过我尝试了下下面的代码:
      javacode:
        ArrayList<String> l = new ArrayList<String>();
        String s = new String();
        s = “aaa”;
        l.add(s);
        s = "bbb";
        l.ass(s);
    运行过后在ArrayList  l 中有两个元素“aaa”,“bbb”。并没有出现覆盖的情况,望指教各位!
      

  10.   


    ArrayList <shukkabutsuCd> shukkabutsuCdList = new ArrayList <shukkabutsuCd>(); 
    shukkabutsuCd shukkabutsu = new shukkabutsuCd(); 
    //情况1:出荷物情报中全部不为空 
    shukkabutsu.setShukkabutsuCd("S001"); 
            shukkabutsu.setProdctCd("版本A"); 
            shukkabutsu.setProdctVrsn("V1.1"); 
            shukkabutsu.setHimmokuCd("品目A"); 
            shukkabutsu.setHimmokuVrsn("V1.1"); 
            shukkabutsu.setOsCd("A"); 
            shukkabutsuCdList.add(shukkabutsu); 
            //情况2:出荷物情报中产品部分为空 
    shukkabutsu = new shukkabutsuCd(); //这里要重新new一个!
             shukkabutsu.setShukkabutsuCd("S002"); 
            shukkabutsu.setProdctCd(null); 
            shukkabutsu.setProdctVrsn(null); 
            shukkabutsu.setHimmokuCd("品目A"); 
            shukkabutsu.setHimmokuVrsn("V1.1"); 
            shukkabutsu.setOsCd("A"); 
            shukkabutsuCdList.add(shukkabutsu); 
      

  11.   


    shukkabutsuCd shukkabutsu = new shukkabutsuCd(); 
    //这里你只定义了一个对象shukkabutsu.setShukkabutsuCd("S001"); //附值给ShukkabutsuCd
            
    shukkabutsu.setShukkabutsuCd("S002"); //再一次附值给ShukkabutsuCd       
            
    你这两次附值都是给了同一个对象下面的属性;就是同一个 shukkabutsu ;所以会把前一个值给覆盖掉!    s = “aaa”; //字符串附值;重新生成的字符串,地址不相同,把S指向“aaa"
         l.add(s); 
        s = "bbb"; 
        l.ass(s);