黑马程序员技术交流社区

标题: Calendar类延迟修改的疑惑? [打印本页]

作者: 谢冬    时间: 2013-3-19 12:46
标题: Calendar类延迟修改的疑惑?
//把当前年份设置成
                Calendar c = Calendar.getInstance();
                c.set(2003, 7, 31);
                c.set(Calendar.MONTH, 8);
                c.set(Calendar.DATE, 5);
                System.out.println(c.getTime());//输出2013-9-5,这里体现了延迟修改
                Calendar c1 = Calendar.getInstance();
                c1.set(Calendar.MONTH, 8);
                c1.set(Calendar.DATE, 31);
                 System.out.println(c.getTime());//为什么这里没有延迟修改?
作者: 罗玉宁    时间: 2013-3-22 02:26
本帖最后由 罗玉宁 于 2013-3-22 02:34 编辑

set(int field, int value) 方法将日历字段field更改为alue,此外它还设置了一个内部成员变量,以指示日历字段field已经被修改,尽管日历字段
field是立即更改的,但该Calendar所代表的时间却不会立即修改。直到调用get()、getTime()、add()、getTimeInMillis()或roll()
时才会重新计算日历的时间,这被称为set方法的延迟修改。
即当程序执行完
c.set(2003, 7, 31);
c.set(Calendar.MONTH, 8);
后不会把时间改为2003年 10月 1日,而是使用内部成员
变量表记录MONTH字段被修改为8,接着程序设置DATE
字段为5,程序内部再记录DATE字段为5 直到调用c.getTime()时间才被真正的修改为9月5日
采用延迟修改的优势是多次调用set()不会触发多次不必要的计算。

作者: 陈丽莉    时间: 2013-3-22 16:01
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2