有没有办法传递对象的副本而不是引用 Java 方法

Is there a way to pass a copy of the object rather than reference to Java method

也许有更聪明的方法来解决我的问题,所以我的问题可能没有为您指明正确的思考方向。

但是,我的问题是我只想在程序开始时初始化我的 Calendar 实例一次,所以我只使用那个日期和时间。

然后我想将该日历传递给一个方法,该方法 adds/subtracts 来自它的一些 months/days 并将该日期时间用于 API 调用。问题是,我想在应用程序的不同位置重复使用初始日期,但该方法不断更改我的 Calendar 实例。

代码:

Calendar在主线程开始时的初始化:

Calendar cal = Calendar.getInstance();

实例使用方法:

private static String getDateUntil(int i, Calendar cal) {
    int month = 0 - i;
    //Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, month);
    Date result = cal.getTime();
    String dateUntil = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(result);

    return dateUntil;
}

调用此方法后,我的cal发生了变化,我无法重新使用初始日期时间。有什么想法吗?

使用 calendar.clone() 获取副本。

在您的方法中使用克隆:

private static String getDateUntil(int i, Calendar cal) {
    int month = 0 - i;
    Calendar mycal = (Calendar)cal.clone();  // Make a copy of the initial instance
    mycal.add(Calendar.MONTH, month);
    Date result = mycal.getTime();
    String dateUntil = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(result);
    return dateUntil;
}