gpt4 book ai didi

java - ArrayList 通过引用传递日期对象?

转载 作者:行者123 更新时间:2023-12-01 16:37:32 29 4
gpt4 key购买 nike

我将日期传递给 ArrayList但是当我更改Date时对象,所有Date位于 ArrayList 内会改变。这是一个例子:

Date currentDate = new Date("6/10/2011");
ArrayList<Date> datesList = new ArrayList();

currentDate.setDate(currentDate.getDate() + 1);
datesList.add(currentDate);

currentDate.setDate(currentDate.getDate() + 1);
datesList.add(currentDate);

currentDate.setDate(currentDate.getDate() + 1);
datesList.add(currentDate);

System.out.println(datesList.toString());

这将打印:

[Mon Jun 13 00:00:00 EDT 2011, Mon Jun 13 00:00:00 EDT 2011, Mon Jun 13 00:00:00 EDT 2011]

知道为什么会发生这种情况以及如何解决它吗?

最佳答案

这是因为变量 currentDate 引用了 Date 的单个实例,您已多次将其添加到列表中。当您调用 currentDate.setDate(currentDate.getDate() + 1) 时,您只是更新同一对象的状态,并且每次调用 datesList.add(currentDate)同一对象被添加到 ArrayList 中。

另请注意 setDate()getDate()是已弃用的方法。您应该考虑使用 Calendar对于日期操作:

Calendar cal = Calendar.getInstance();
cal.set(2011, 5, 10);

ArrayList<Date> datesList = new ArrayList<Date>();

datesList.add(cal.getTime());

cal.add(Calendar.DATE, 1);
datesList.add(cal.getTime());

cal.add(Calendar.DATE, 1);
datesList.add(cal.getTime());

System.out.println( datesList.toString());

或者更好,Joda Time .

关于java - ArrayList 通过引用传递日期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585238/

29 4 0