我:如果我要設置日曆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 ; //
是最後這句話是否正確?
我:如果我要設置日曆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 ; //
是最後這句話是否正確?
雖然c2 = c
看看會奏效,這不是你想要的東西:這兩個變量將指向相同的日曆實例。作爲此作業的結果,對c
所做的任何更改也將在c2
之間,反之亦然。
您可以使用clone()
方法,使Calendar
對象的副本,是這樣的:
Calendar c= (Calendar)c2.clone();
這就是我想要的!非常感謝。編輯:你的回答太棒了! – ARMAGEDDON 2013-04-25 12:27:03
我剛剛在我的代碼中看到了這種行爲!無法相信我的眼睛,不得不尋求確認。謝謝:) – Poutrathor 2014-10-24 13:46:40
你甚至需要c2 = Calendar.getInstance()
,只是直接分配 'C2 = C'。
c2 = c表示您將有2個字段指向相同的實例。如果你修改c,你也將修改c2
c2 = c.clone()克隆實例並返回另一個實例。如果你修改c您不會修改C2
本聲明:
c2 = c ;
會的c
值複製到c2
。 c
的值是而不是 a Calendar
對象 - 它是一個參考。在這個語句之後,這兩個變量具有相同的值 - 對同一個對象的兩個引用。任何對Calendar
對象的更改都可以通過任一變量來觀察。
這就像給予兩個不同的人的紙片給你的家庭地址 - 如果一個人使用地址來到你的房子,並繪製前門綠色,那麼其他人也會看到。
請注意,這不是Calendar
- 具體 - 這是在Java中分配所有類的行爲。
(區分變量,引用和對象是非常重要的,在正常的討論中,爲了簡潔起見,三種常常被錯誤地使用,但是當需要時你需要能夠區分它們)。
注意,此代碼:
Calendar c2 = Calendar.getInstance();
c2 = c;
被毫無意義地創建一個新的Calendar
實例。這將是更理智寫成:
Calendar c2 = c;
該代碼將具有相同的明顯效果,而無需調用Calendar.getInstance()
,然後扔掉新創建的對象。
謝謝Jon Skeet!太棒了!我現在更多地瞭解Java類了! – ARMAGEDDON 2013-04-25 12:32:33
+1爲例。另一個Skeety標記說明:) – 2013-04-25 12:41:06
我希望它的正確..! – SenthilPrabhu 2013-04-25 12:25:20
爲什麼不寫一點測試程序來比較自己的結果? – Mike 2013-04-25 12:25:30
這條語句將把'c'的引用賦給變量'c2'。 ('c == c2'將是'true')。 – afk5min 2013-04-25 12:26:31