2013-04-25 1 views
5

내가 가진 : 나는 C 달력와 같다 달력 (C2)을 설정하려면캘린더 c와 동일한 캘린더 c2를 설정할 수 있습니까?

Calendar c = Calendar.getInstance(); 
c.set(Calendar.HOUR_OF_DAY,1); 
c.set(Calendar.MINUTE,23); 
c.set(Calendar.SECOND,22); 

Calendar c2 = Calendar.getInstance(); 

c2 = c ; // 

이 마지막 문장 맞습니까?

+0

나는 그 올바른 .. .. 희망! – SenthilPrabhu

+0

왜 결과를 직접 비교할 수있는 간단한 테스트 프로그램을 작성하지 않습니까? – Mike

+0

이 명령문은 변수 'c2'에 'c'에 대한 참조를 할당합니다. ('c == c2'는'true'입니다). – afk5min

답변

0

캘린더 클래스에는 메소드 compareTo이 있습니다. 두 변수가 같은 일정 인스턴스를 가리키는됩니다 작동하는 것처럼 보일 것이다 c2 = c 비록 그

CompareTo()

+0

네, 그렇지만 저는 그것들을 비교하고 싶지 않습니다. 한 달력을 다른 것과 똑같이 설정하고 싶습니다. – ARMAGEDDON

10

에 봐 가지고, 그것은 당신이 원하는 아니다. 이 지정의 결과로 c에 대한 변경 사항은 c2에도 적용되며 그 반대의 경우도 마찬가지입니다.

이처럼 Calendar 객체의 복사본을 만들 clone() 방법을 사용할 수 있습니다 :

Calendar c= (Calendar)c2.clone(); 
+0

이것이 내가 원하는 것입니다! 정말 고맙습니다. 편집 : 귀하의 답변은 대단해! – ARMAGEDDON

+0

방금 ​​내 코드에서이 동작을 보았습니다! 내 눈을 믿을 수 없어 확인을 위해 검색해야했습니다. 감사합니다 :) – Poutrathor

0

심지어 해달라고 c2 = Calendar.getInstance() 필요, 다만 직접 지정 '= C를 (C2)'.

2

c2 = c는 동일한 인스턴스를 가리키는 2 개의 필드를 갖게됨을 의미합니다. c를 수정하면 c2를 수정합니다.

c2 = c.clone()은 인스턴스를 복제하고 다른 인스턴스를 반환합니다. 당신이 C2에게

3

이 문을 수정하지 않습니다 당신 c를 수정하는 경우 :

c2 = c ; 

c2c의 값을 복사합니다. c의 값은 이 아니며이고 Calendar 개체입니다. 참조 용입니다. 이 문 다음에 두 변수는 같은 값을 갖습니다. 동일한 객체에 대한 두 개의 참조입니다. Calendar 개체에 대한 변경 사항은 두 변수를 통해 확인할 수 있습니다.

두 사람이 집 주소를주는 종이 조각을주는 것과 같습니다. 한 사람이 주소를 사용하여 집에 도착한 후 현관 문을 페인트하면 다른 사람도 그 사실을 볼 수 있습니다.

Calendar -specific이 아닙니다. 이는 Java 클래스의 할당 동작입니다.

(기본적으로 변수, 참조 및 개체를 구별하는 것이 중요합니다. 정상적인 토론에서는 세 가지를 종종 간결하게하기 위해 잘못 사용하지만 필요하면 언제든지 차이를 나타낼 수 있어야합니다.)

참고가이 코드 :

Calendar c2 = Calendar.getInstance(); 
c2 = c; 

가 무의미 새로운 Calendar 인스턴스를 만드는 것입니다.

Calendar c2 = c; 

그 코드가 같은 효과가 없을 것이다, 그러나 Calendar.getInstance()를 호출하고 새로 만든 객체를 버리고 않고 : 그것은으로 더 현명하게 기록 될 것입니다.

+0

Jon Skeet 고맙습니다! 굉장한 대답도! 이제 Java 클래스에 대해 더 많이 알게되었습니다! – ARMAGEDDON

+0

+1 예를 들어 +1 다른 Skeety 표시 설명 :) –

관련 문제