2013-04-25 92 views
5

我:如果我要設置日曆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 2013-04-25 12:25:20

+0

爲什麼不寫一點測試程序來比較自己的結果? – Mike 2013-04-25 12:25:30

+0

這條語句將把'c'的引用賦給變量'c2'。 ('c == c2'將是'true')。 – afk5min 2013-04-25 12:26:31

回答

0

日曆班有一個方法compareTo。有對

CompareTo()

+0

是的,但我不想比較它們,我想設置一個日曆等於另一個日曆 – ARMAGEDDON 2013-04-25 12:25:56

10

雖然c2 = c看看會奏效,這不是你想要的東西:這兩個變量將指向相同的日曆實例。作爲此作業的結果,對c所做的任何更改也將在c2之間,反之亦然。

您可以使用clone()方法,使Calendar對象的副本,是這樣的:

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

這就是我想要的!非常感謝。編輯:你的回答太棒了! – ARMAGEDDON 2013-04-25 12:27:03

+0

我剛剛在我的代碼中看到了這種行爲!無法相信我的眼睛,不得不尋求確認。謝謝:) – Poutrathor 2014-10-24 13:46:40

0

你甚至需要c2 = Calendar.getInstance(),只是直接分配 'C2 = C'。

2

c2 = c表示您將有2個字段指向相同的實例。如果你修改c,你也將修改c2

c2 = c.clone()克隆實例並返回另一個實例。如果你修改c您不會修改C2

3

本聲明:

c2 = c ; 

會的c值複製到c2c的值是而不是 a Calendar對象 - 它是一個參考。在這個語句之後,這兩個變量具有相同的值 - 對同一個對象的兩個引用。任何對Calendar對象的更改都可以通過任一變量來觀察。

這就像給予兩個不同的人的紙片給你的家庭地址 - 如果一個人使用地址來到你的房子,並繪製前門綠色,那麼其他人也會看到。

請注意,這不是Calendar - 具體 - 這是在Java中分配所有類的行爲。

(區分變量,引用和對象是非常重要的,在正常的討論中,爲了簡潔起見,三種常常被錯誤地使用,但是當需要時你需要能夠區分它們)。

注意,此代碼:

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

被毫無意義地創建一個新的Calendar實例。這將是更理智寫成:

Calendar c2 = c; 

該代碼將具有相同的明顯效果,而無需調用Calendar.getInstance(),然後扔掉新創建的對象。

+0

謝謝Jon Skeet!太棒了!我現在更多地瞭解Java類了! – ARMAGEDDON 2013-04-25 12:32:33

+0

+1爲例。另一個Skeety標記說明:) – 2013-04-25 12:41:06