gregorianCalendar类的方法获取?

时间:2014-09-26 10:11:42

标签: java get calendar

我在Java中使用类GregorianCalendar时遇到问题。 为什么方法get会更改GregorianCalendar类型的变量?

我做这项工作:

System.out.println(timestart);
second = timestart.get(GregorianCalendar.SECOND);
System.out.println(timestart);

输出结果为:

,HOUR_OF_DAY=15,MINUTE=37,SECOND=16,MILLISECOND=794140,ZONE_OFFSET=?,DST_OFFSET=?]
,HOUR=3,HOUR_OF_DAY=15,MINUTE=50,SECOND=30,MILLISECOND=0,ZONE_OFFSET=3600000,DST_OFFSET=3600000]

为简单起见,我展示了输出的有趣部分。 我希望这两个印刷品给出相同的结果,但不是。

1 个答案:

答案 0 :(得分:1)

查看GregorianCalendarCalendar的源代码,您可以看到get首先调用名为complete的方法,该方法可以调用updateTime或{ {1}} - 根据日历的时间戳计算分钟,秒等字段的方法。

每当更改值时,所有字段都将失效。字段似乎只是在访问时重新计算,大概是为了避免不必要的计算,如果你永远不会使用它们。所以基本上它是懒惰加载这些字段。

另一方面,computeFields方法只打印所有值,而不重新计算任何内容。因此,在您的代码中,第一个输出可能会显示无效的旧值。如果是这种情况,那么您应该在第一个输出的省略部分看到类似toString的内容。