如果最终的静态整数变量可以';在java中不能更改,为什么在Calendar类中可以更改日期?

如果最终的静态整数变量可以';在java中不能更改,为什么在Calendar类中可以更改日期?,java,final,Java,Final,据我所知,最后一个静态原语实例变量不能在java中更改。但是,当我查看java.util.Calendar时,我发现以下几行代码: public final static int DATE = 5; 我可以像这样操纵日期 Calendar c = Calendar.getInstance(); c.add(Calendar.DATE, 30); 我有点迷路了。为什么?事实上,“日期”是最终的,这意味着初始化后您不能更改它 日历日期=8;//失败 您显示的代码(c.add…)更改了Calend

据我所知,最后一个静态原语实例变量不能在java中更改。但是,当我查看java.util.Calendar时,我发现以下几行代码:

public final static int DATE = 5;
我可以像这样操纵日期

Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 30);
我有点迷路了。为什么?

事实上,“日期”是最终的,这意味着初始化后您不能更改它 日历日期=8;//失败


您显示的代码(c.add…)更改了Calendar.time的值,该值不是最终值。

阅读了Calendar类的文档后,我认为原因如下:

public final static int DATE = 5
为包含日历实例的所有时间信息的数组字段[]定义日期字段的字段索引。这里有5个菜单字段[5]存储日期信息。此索引无法更改,但我们可以使用

set(Calendar.DATE, 10)
将字段[日期]更改为10


顺便说一句,感谢所有有价值和明确的答案。

你真的在更改日期吗?你认为add有什么作用?c.set(Calendar.DATE,30)怎么样;你认为
set
做什么?你认为
DATE
代表什么?显然,您已经找到了源代码,为什么不阅读javadoc?
Calendar。DATE
用作索引,以便在
add
方法中找到要编辑的正确字段。调用此方法不会修改
DATE
的值。您应该尝试在Calendar类中阅读该方法的实现。