A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢冬 中级黑马   /  2013-3-19 12:46  /  1658 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//把当前年份设置成
                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());//为什么这里没有延迟修改?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 罗玉宁 于 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()不会触发多次不必要的计算。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马