java.sql.Connection con = java.sql.DriverManager.getConnection(url,user,password);
java.sql.Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
java.sql.ResultSet rs = stmt.executeQuery("select startDate,endDate,totalDays,type from RT_RecordTime where userId = '20010529162254110' and convert(varchar(7), startDate, 120) = '" + strYear + "-" + strMonth +"'");
System.out.println("******************************************");
List<Calendar> list = new ArrayList<Calendar>();
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
while(rs.next())
{
String startDate = rs.getString(1).toString();
System.out.println(startDate+"????????????????");
cal1.set(Integer.parseInt(startDate.substring(0,4)), Integer.parseInt(startDate.substring(5,7))-1, Integer.parseInt(startDate.substring(8,10)));
String d = sdf.format(cal1.getTime());
         System.out.println(d+"KKKKKKKOOOOOOOOOOOOOOOOOOOKKKKKKK");
String endDate = rs.getString(2).toString();
cal2.set(Integer.parseInt(endDate.substring(0,4)), Integer.parseInt(endDate.substring(5,7))-1, Integer.parseInt(endDate.substring(8,10)));
            list.add(cal1);
            while(cal1.compareTo(cal2) != 0)
            {
            
             cal1.add(java.util.Calendar.DATE, 1);
             String s = sdf.format(cal1.getTime());
           //后面这行显示,cal1放进list前还是各不相同的~~
             System.out.println(s+"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVv");
             list.add(cal1);
            }
}
        //晕死,后面这三行输出的结果居然相同,~~
System.out.println(sdf.format(list.get(0).getTime()));
System.out.println(sdf.format(list.get(1).getTime()));
System.out.println(sdf.format(list.get(2).getTime()));

解决方案 »

  1.   

    Calendar.getInstance() 是获取日历的实例, cal1 和 cal2是指向同一个对象的,和list中的对象一样,list[0] list[1] list[2]也是指向同一个对象d的,就是Calendar的唯一实例. 
      

  2.   

    感谢楼上的回复,不过还是不太明白,你的意思是因为我存进去的都是cal1对象,所以list里面的值都是一样????????
      

  3.   

    cal1  cal2 list[0]   list[1]   list[2] 是不同的指针(变量),而他们都是指向同一个对象
    Calendar   cal1   =   Calendar.getInstance(); 
    Calendar   cal2   =   Calendar.getInstance();
    这两句就相当于
    Calendar   cal1   =   Calendar.getInstance(); 
    Calendar   cal2   =   cal1;