java - 更改小时和分钟后,日历 getTimeInMillis() 返回相同的值

标签 java android

该问题发生在以下情况:

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());
}

在对两个日历调用 set() 方法之前和之后使用 getTimeInMillis() 比较值后,我发现它们是相同的。知道为什么会发生这种情况吗?

最佳答案

这是因为这里:

Calendar c1 = pickedDate;
Calendar c2 = pickedDate;

您将这两个对象设置为pickedDate。因此,任何对象的任何更改都会更改 pickedDate 中的值,实际上,实例 c1c2 都是如此。解决这个问题的一种方法是将这些行更改为:

Calendar c1 = (Calendar)pickedDate.clone();
Calendar c2 = (Calendar)pickedDate.clone();

这会将它们设置为 pickedDate 的克隆,即它们不会相同。

关于java - 更改小时和分钟后,日历 getTimeInMillis() 返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309438/

相关文章:

java - 使用不同的实现调用相同的方法签名

java - 如何使用 spring RestTemplate 生成带有二进制数据的curl 请求?

java - 在外部文件夹 war 文件命令中运行类路径 Spring java

java - 文本在屏幕上不断滚动

Android关于TableLayout和省略号的问题

Java 10,Intellij 警告(类未导出,在同一模块中访问)

java - 数组中的元素,使得其左侧元素的总和等于其右侧元素的总和

android - 没有规则使目标错误android ndk build sqlite

android - FloatingActionButton 类无法实例化

java - 开发 Android 应用程序时的最佳实践