在以下情形中会出现此问题:
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());
}
Run Code Online (Sandbox Code Playgroud)
在我将getTimeInMillis()调用set()方法之前和之后的值与两个日历进行比较之后,我注意到它们是相同的.知道为什么会这样吗?
这是因为这里:
Calendar c1 = pickedDate;
Calendar c2 = pickedDate;
Run Code Online (Sandbox Code Playgroud)
您将两个对象都设置为pickedDate.因此,任何对象的任何更改都将更改实际值pickedDate,实际值c1和c2.解决这个问题的一种方法是将这些行改为:
Calendar c1 = (Calendar)pickedDate.clone();
Calendar c2 = (Calendar)pickedDate.clone();
Run Code Online (Sandbox Code Playgroud)
这会将它们设置为克隆pickedDate,即它们将不相同.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |