2011-10-05 88 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; 
} 

需要记住的重要一点是,赋值运算符=不会创建变量,其右侧的副本,将其分配给在参考左边的参考在右边。