gpt4 book ai didi

Java日历通过引用传递?

转载 作者:行者123 更新时间:2023-12-02 03:45:39 25 4
gpt4 key购买 nike

我有一个类,其中的方法传递了几个日历对象。在该方法中,我向日历对象添加了几天/几个月。

但是,在方法返回时,传入的 Calendar 对象不再保存执行“处理”的方法的更新日期。

我曾想过使用日历对象,无论 id 在哪里更改状态,都会保留更改?代码如下:

Calendar aDate = Calendar.getInstance();
aDate.set(2016, 2, 30);

Calendar start = Calendar.getInstance();

myClass.setStartAndEnd(aDate, start);

然后是setStartAndEnd方法...

void setStartAndEnd(Calendar aDate, Calendar start) {

if (aDate.get(Calendar.DAY_OF_WEEK) == 1) {
start = aDate;
} else {
start.add(Calendar.DAY_OF_WEEK, 5);
}
}

在本例中,我预计“开始”会在 3 月 30 日之后加上 5 天,但是在返回该方法时,它仍然以 3 月 30 日结束

最佳答案

你做了两件不同的事情:

if (aDate.get(Calendar.DAY_OF_WEEK) == 1) {
start = aDate;

--这样,您将本地 start 引用重新分配给aDate,因此从现在开始本地start不是作为参数传递给 start,而是传递给 aDate。在该方法之外,start 不会重新分配,因为对它的引用是按值传递的;

} else {
start.add(Calendar.DAY_OF_WEEK, 5);

--这样,您修改了本地 start,它仍然指向作为参数传递的 start,因此所有更改也会反射(reflect)在方法外的对象中。

要避免错误地重新分配参数的情况,请将它们设为final:

void setStartAndEnd(final Calendar aDate, final Calendar start) {
// ...
}

关于Java日历通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36336774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com