2011-10-05 116 views
3

我有一段代碼,我不太明白。它造成了一個錯誤。日曆滾動影響其他日曆

有一個日曆對象和寫入該日曆對象爲字符串的方法,但增加了今年第一個。但是,即使有2個日曆對象,它們也正在滾動。

發現任何下文

public static synchronized Calendar rollDatePlus1Year(Calendar currentDate){ 
    Calendar rtn = currentDate; 
    rtn.roll(Calendar.YEAR, 1); 
    rtn.roll(Calendar.MINUTE, -1); 
    return rtn; 
} 

從這兩個「的currentdate」和「RTN」卷的方法是通過每年遞增。此方法不應更改任何值,但會返回新的表示形式。

任何想法?

+0

有用的信息http://www.java2s.com/Code/Java/Data-Type/Date-Calculation.htm – mKorbel

回答

5

Calendar rtn = currentDate;分配參考反對其他變量。從這一點rtncurrntDate指向同一個對象。如果你想,內存中的同一個地方。因此,使用這些引用的一個完成的所有更改使用第二個,因爲是同一個對象上完成的是可見的。

+0

我認爲這個問題可能是這樣,但不能看我如何糾正它? –

0

什麼你實際上做的是僅僅複製參考的currentdate,等等RTN任何操作是對同一對象作爲參數傳遞。

2

AlexR解釋爲什麼你的錯誤發生的情況。爲了解決你的問題,你需要創建一個新的日曆對象:

public static synchronized Calendar rollDatePlus1Year(Calendar currentDate){ 
    Calendar rtn = Calendar.getInstance(); 
    rtn.setTimeInMillis(currentDate.getTimeInMillis()); 
    rtn.roll(Calendar.YEAR, 1); 
    rtn.roll(Calendar.MINUTE, -1); 
    return rtn; 
} 

需要記住的重要一點是,賦值運算符=不會創建變量,其右側的副本,將其分配給在參考左邊的參考在右邊。