2013-04-25 23 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 = C」、c2 = Calendar.getInstance()を必要といけません。

2

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

c2 = c.clone()はインスタンスをクローンし、別のインスタンスを返します。あなたはC2に

3

このステートメントを変更することはありませんあなたのcを変更した場合:

c2 = c ; 

c2cの値をコピーします。 cの値はではなく、Calendarオブジェクトです。これは参考値です。このステートメントの後、2つの変数は同じ値を持ちます - 同じオブジェクトへの2つの参照。 Calendarオブジェクトの変更は、いずれかの変数を介して確認できます。

あなたの家の住所を示す2つの異なる人物のようなものです。あなたの家に行くために住所を使用し、フロントドアを緑色に塗ると、他の人もそれを見るでしょう。

Calendar -specificではないことに注意してください。これは、すべてのクラスの割り当ての動作です。

(基本的に変数、参照、オブジェクトを区別することは非常に重要です。通常の説明では、3つは頻繁に間違って使用されることがよくありますが、必要なときに違いを伝える必要があります)

なお、このコード:

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

が無意味に新しいCalendarインスタンスを作成しています。

Calendar c2 = c; 

そのコードが同じ目に見える効果がありますが、Calendar.getInstance()を呼び出した後、新しく作成されたオブジェクトを廃棄せずに:それはように、より賢明に書かれることになります。

+0

ありがとうJon Skeet!素晴らしい答え!私は今Javaクラスについてもっと理解しています! – ARMAGEDDON

+0

+1。他のSkeetyマークの説明:) –

関連する問題