在以下情况中会出现此问题:
public void setCal(final Calendar calendar) {
Calendar c1 = pickedDate;
Calendar c2 = pickedDate;
Log.d(TAG, c1.getTimeInMillis());
Log.d(TAG, c2.getTimeInMillis());
c1.set(Calendar.HOUR_OF_DAY, 10);
c1.set(Calendar.MINUTE, 20);
c2.set(Calendar.HOUR_OF_DAY, 18);
c2.set(Calendar.MINUTE, 30);
Log.d(TAG, c1.getTimeInMillis());
Log.d(TAG, c2.getTimeInMillis());
}
在我将调用getTimeInMillis()
方法之前和之后的set()
值与两个日历进行比较后,我发现它们是相同的。知道为什么会这样吗?
答案 0 :(得分:5)
这是因为这里:
Calendar c1 = pickedDate;
Calendar c2 = pickedDate;
您将两个对象都设置为pickedDate
。因此,任何对象中的任何更改都将更改pickedDate
中的值,实际上是c1
和c2
实例。解决这个问题的一种方法是将这些行改为:
Calendar c1 = (Calendar)pickedDate.clone();
Calendar c2 = (Calendar)pickedDate.clone();
这会将它们设置为pickedDate
的克隆,即它们不会相同。