日期:2014-05-20  浏览次数:20657 次

请教一个对Calender赋值的问题
我在做计算日期间隔的时候碰到这样一个问题:
两个Calender对象,temp和cStart,cStart已经被赋值了一个时间DateA(cStart.setTime(DateA)方法)
现在要把cStart的当前值(即DateA)传给temp,然后对temp进行YEAR+1的操作,同时cStart的值仍然是DateA。
如果这样:
temp=cStart;
temp.add(Calendar.YEAR,1);
则发现:在对temp进行YEAR+1后,cStart的值竟然也跟着YEAR+1了,即对temp的操作后,cStart仍然等于temp。(请问这是为啥呢?)
后来只好这样:
temp.setTime(cStart.getTime());
temp.add(Calendar.YEAR,1);
把cStart的值用getTime()方法转成Date型,再赋给temp,然后对temp的操作,cStart就不受影响了。

我是业余新手,看英文开发文档比较吃力,请问我这个方法是一般采用的吗?有没有更优的实现?


------解决方案--------------------
"temp=cStart;"不能这样赋值。
------解决方案--------------------
temp=cStart 这是引用传递,指向的对象是同一个,你可以再NEW一个 clander对象temp,用Cstart赋值即可
------解决方案--------------------
引用:
我在做计算日期间隔的时候碰到这样一个问题:
两个Calender对象,temp和cStart,cStart已经被赋值了一个时间DateA(cStart.setTime(DateA)方法)
现在要把cStart的当前值(即DateA)传给temp,然后对temp进行YEAR+1的操作,同时cStart的值仍然是DateA。
如果这样:
temp=cStart;
temp.add(Calendar.YEAR,1);
则发现:在对temp进行YEAR+1后,cStart的值竟然也跟着YEAR+1了,即对temp的操作后,cStart仍然等于temp。(请问这是为啥呢?)
后来只好这样:
temp.setTime(cStart.getTime());
temp.add(Calendar.YEAR,1);
把cStart的值用getTime()方法转成Date型,再赋给temp,然后对temp的操作,cStart就不受影响了。

我是业余新手,看英文开发文档比较吃力,请问我这个方法是一般采用的吗?有没有更优的实现?

你只需这样:
Calendar temp = (Calendar)cStart.clone();
完全能满足你的需求。

------解决方案--------------------
“=”号对于基本类型可以值传递,对象的话是引用传递的