Java Calendar.add影响其他Calendar对象吗?

Has*_*ani 2 java calendar arraylist

我正在尝试将连续的日历天添加到中ArrayList。当我添加一天ArrayList并稍后使用Calendar.add方法转到第二天时,我不知道为什么ArrayList也会自动修改,即原始条目添加了1天?下面是我的代码,可以解释这种情况:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.ArrayList;

public class TestingStuff {

    public static void main(String[] args) throws ParseException {

        ArrayList<Calendar> cals = new ArrayList<Calendar>();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd");
        Calendar startDate = Calendar.getInstance();
        startDate.setTime(sdf.parse("Mar 25"));

        cals.add(startDate);
        Calendar secondDate = startDate;
        secondDate.add(Calendar.DATE, 1);
        Calendar thirdDate = Calendar.getInstance();
        thirdDate.setTime(sdf.parse("Mar 26"));

        if (cals.contains(thirdDate)) {
            System.out.println("It does contain");
        } else {
            System.out.println("Sorry, it does not contain");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我预计不会在3月26日举行ArrayList,但确实如此。非常感谢!

Ale*_*lex 5

Calendar secondDate = startDate;
secondDate.add(Calendar.DATE, 1);
Run Code Online (Sandbox Code Playgroud)

该行表示secondDatestartDate指向同一对象,因此修改一个对象也会修改另一个对象。

如果您想要一个Calendar比另一个实例晚一天的新实例,则需要克隆第一个实例,然后按照此答案中的建议修改克隆。例如:

Calendar secondDate = (Calendar)startDate.clone();
secondDate.add(Calendar.DATE, 1);
Run Code Online (Sandbox Code Playgroud)