6

私は持っている:

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 に等しく設定したい場合、この最後のステートメントは正しいですか?

4

5 に答える 5

13

動作してc2 = cいるように見えますが、それはあなたが望むものではありません: 両方の変数が同じカレンダー インスタンスを指しています。この割り当ての結果、 に加えられた変更は にcも適用さc2れ、その逆も同様です。

メソッドを使用して、次のようにオブジェクトclone()のコピーを作成できます。Calendar

Calendar c= (Calendar)c2.clone();
于 2013-04-25T12:26:09.867 に答える
3

この文:

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()、新しく作成されたオブジェクトを呼び出して破棄することはありません。

于 2013-04-25T12:29:07.410 に答える
2

c2 = c は、同じインスタンスを指す 2 つのフィールドがあることを意味します。c を変更すると、c2 も変更されます

c2 = c.clone() はインスタンスを複製し、別のインスタンスを返します。c を変更しても、c2 は変更されません。

于 2013-04-25T12:27:46.187 に答える
0

Calendar クラスにはメソッドがありcompareToます。それを見てください

CompareTo()

于 2013-04-25T12:25:28.437 に答える
-1

も必要ありませんc2 = Calendar.getInstance()。直接 'c2 = c' を代入するだけです。

于 2013-04-25T12:26:21.407 に答える