myClass Mc1 = new myClass();
myClass Mc2 = new myClass();List dataList1 = new ArrayList();
List dataList2 = new ArrayList();for (int i = 0; i < dataList.size(); i++) {
    Mc1 = (myClass)dataList.get(i);
    Mc1.setPot("1");
    dataList1.add(Mc1);
}for (int i = 0; i < dataList.size(); i++) {
    Mc2 = (myClass)dataList.get(i);
    Mc2.setPot("2");
    dataList2.add(Mc2);
}
for (int i = 0; i < dataList1.size(); i++) {
    Mc1 = (myClass)dataList1.get(i);
    System.out.println("out-----Mc1.getPot()-----==" + Mc1.getPot() "==");
}为什么输出的结果是:
out-----Mc1.getPot()-----==2==
out-----Mc1.getPot()-----==2==
out-----Mc1.getPot()-----==2==
out-----Mc1.getPot()-----==2==是不是List类的问题呀?应该怎么解决的?

解决方案 »

  1.   

    这个问题其实不难理解,因为你的上下两个循环中Mc1和Mc2修改的是同一个对象,所以以最后一次修改的为主。虽然你在开始时分别对Mc1和Mc2进行了初始化,但是在两个循环中,你把同一个List(dataList)中MyClass的对象分别赋给了Mc1和Mc2,此时的Mc1和Mc2所代表的对象已经不是你初始化时的对象,而是dataList中的某一个对象。也许你可能会说你已经分别存在了两个List中了,但是这个两个所包含的对象还都是一样的,那么就是dataList中的对象。
      

  2.   

    同意楼上dataList.get(i)==dataList1.get(i)==dataList2.get(i)
      

  3.   

    产生新对象分别放入dataList1和dataList2
      

  4.   

    如何产生呢?我new都不好用,想不出来还有什么办法。再建一个主list我也试过,也是不行的。郁闷死我了。
      

  5.   

    不知道你的具体代码
    假如你的myClass如下
    class myClass {
      private String pot;
      public myClass() {
      }  public myClass(myClass b) {
        this.pot = b.pot;
      }  public void setPot(String s) {
        pot = s;
      }
      
      public String getPot(){
       return pot;
      }
    }
    修改2段
        for (int i = 0; i < dataList.size(); i++) {
          Mc1 = new myClass((myClass) dataList.get(i));
          Mc1.setPot("1");
          dataList1.add(Mc1);
        }    for (int i = 0; i < dataList.size(); i++) {
          Mc2 = new myClass((myClass) dataList.get(i));
          Mc2.setPot("2");
          dataList2.add(Mc2);
        }
      

  6.   

    在java里面对象的引用都是引用了对象的地址,程序中dataList,dataList1,dataList2里面保存的MCClass的地址都是一样,所以会造成一样的结果,不信的话楼主可以把dataList,dataList1,dataList2里面的对象值都打印出来看看是不是都是一样的。