2014-04-16 1 views
0

ArrayList에 연속 달력 일을 추가하려고합니다. ArrayList에 하루를 추가하고 Calendar.add 메서드를 사용하여 다음 날로 이동하면 ArrayList이 자동으로 수정 된 이유, 즉 원래 항목이 1 일 추가 된 이유를 모르겠습니다. 다음은이 상황을 설명 할 내 코드입니다 :다른 Calendar 개체에 영향을 미치는 Java Calendar.add가 있습니까?

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.ArrayList; 

public class TestingStuff { 

    public static void main(String[] args) throws ParseException { 

     ArrayList<Calendar> cals = new ArrayList<Calendar>(); 
     SimpleDateFormat sdf = new SimpleDateFormat("MMM dd"); 
     Calendar startDate = Calendar.getInstance(); 
     startDate.setTime(sdf.parse("Mar 25")); 

     cals.add(startDate); 
     Calendar secondDate = startDate; 
     secondDate.add(Calendar.DATE, 1); 
     Calendar thirdDate = Calendar.getInstance(); 
     thirdDate.setTime(sdf.parse("Mar 26")); 

     if (cals.contains(thirdDate)) { 
      System.out.println("It does contain"); 
     } else { 
      System.out.println("Sorry, it does not contain"); 
     } 
    } 
} 

나는 ArrayList 26 마르 기대하고 있지 않다, 그러나 그것은 않습니다. 감사합니다.

답변

4
Calendar secondDate = startDate; 
secondDate.add(Calendar.DATE, 1); 

이 라인 secondDatestartDate 그래서 하나는 다른 변경, 수정, 동일한 객체를 참조한다는 것을 의미한다.

Calendar 인스턴스가 다른 인스턴스보다 하루 늦은 경우 첫 번째 인스턴스를 복제 한 다음 this answer에서 제안 된대로 복제본을 수정해야합니다. 예를 들면 다음과 같습니다.

Calendar secondDate = (Calendar)startDate.clone(); 
secondDate.add(Calendar.DATE, 1); 
+0

안녕하세요. Array에 삽입 한 후 나중에 startDate와 secondDate가 모두 변경되면서 Array의 객체가 변경된 이유가 궁금합니다. – HasnainMamdani

+0

ArrayList에 추가 된 것은'startDate' 및'secondDate'에 의해 참조 된 동일한 객체에 대한 참조였으며 객체의 사본이 아닙니다. 자세한 내용은 http://stackoverflow.com/questions/40480/is-java-pass-by-reference를 참조하십시오. – Alex

관련 문제