0

在以下代码中,该set方法更改了类的字段值Calendar。该字段YEAR已声明static int YEAR。那么为什么通过创建两个Calendar类对象,对一个对象的更改会反映到另一个对象上呢?这不会发生。我会问你Java开发人员是如何实现这个的?

Calendar calendar = new GregorianCalendar();
Calendar cal = new GregorianCalendar(2011,9,13);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.YEAR));
4

2 回答 2

6

Calendar.YEAR是一个常量,仅用于命名Calendar. 该字段的不是静态的:它可以并且会在Calendar.

Calendar为日期和时间的不同组成部分定义了许多这些字段名称,专门用于相应字段的 get 和 set 操作。

这是javadoc 中的部分Calendar.YEAR

至于实现,setandget方法知道这些不同的字段类型,并根据传入的常量更改实例中的值。可以将其视为or中的一个大switch语句,打开所有字段值。getset

于 2012-09-13T15:46:33.567 回答
3

YEAR(和其他相关字段)只是用于告诉您Calendar想要哪个字段的常量。如果您查看 的值YEAR,您会发现它的实际static final 值为 1

正如您所期望的那样,个人的年份Calendar最终存储在对象中,并且该常量仅用于询问其实际年份值。CalendarYEARCalendar

于 2012-09-13T15:48:08.113 回答