私は持っている:
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 ; //
Calendar c2 を Calendar c に等しく設定したい場合、この最後のステートメントは正しいですか?
私は持っている:
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 ; //
Calendar c2 を Calendar c に等しく設定したい場合、この最後のステートメントは正しいですか?
動作してc2 = c
いるように見えますが、それはあなたが望むものではありません: 両方の変数が同じカレンダー インスタンスを指しています。この割り当ての結果、 に加えられた変更は にc
も適用さc2
れ、その逆も同様です。
メソッドを使用して、次のようにオブジェクトclone()
のコピーを作成できます。Calendar
Calendar c= (Calendar)c2.clone();
この文:
c2 = c ;
の値を にコピーしc
ますc2
。の値はオブジェクトでc
はなく、参照です。Calendar
このステートメントの後、2 つの変数は同じ値 (同じオブジェクトへの 2 つの参照) を持ちます。オブジェクトへの変更は、Calendar
いずれかの変数を介して監視できます。
これは、自宅の住所を記した紙を 2 人の異なる人に渡すようなものです。1 人がその住所を使用してあなたの家に行き、玄関のドアを緑に塗れば、もう 1 人もそれを見ることができます。
これは特定のものではないことに注意してください。これは、JavaのすべてのCalendar
クラスの割り当ての動作です。
(基本的に、変数、参照、およびオブジェクトを区別することは非常に重要です。通常の議論では、簡潔にするために 3 つが間違って使用されることがよくありますが、必要なときに違いを見分けることができる必要があります。)
このコードに注意してください:
Calendar c2 = Calendar.getInstance();
c2 = c;
Calendar
無意味に新しいインスタンスを作成しています。より賢明に次のように記述します。
Calendar c2 = c;
そのコードは同じ目に見える効果がありますがCalendar.getInstance()
、新しく作成されたオブジェクトを呼び出して破棄することはありません。
c2 = c は、同じインスタンスを指す 2 つのフィールドがあることを意味します。c を変更すると、c2 も変更されます
c2 = c.clone() はインスタンスを複製し、別のインスタンスを返します。c を変更しても、c2 は変更されません。
Calendar クラスにはメソッドがありcompareTo
ます。それを見てください
も必要ありませんc2 = Calendar.getInstance()
。直接 'c2 = c' を代入するだけです。