我有:
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY,1);
c.set(Calendar.MINUTE,23);
c.set(Calendar.SECOND,22);
Calendar c2 = Calendar.getInstance();
c2 = c ; //
如果我想将Calendar c2设置为Calendar c?
,那么这最后一个语句是否正确答案 0 :(得分:10)
虽然c2 = c
似乎可行,但这不是您想要的:两个变量都将指向同一个日历实例。作为此分配的结果,对c
所做的任何更改也将在c2
中,反之亦然。
您可以使用clone()
方法制作Calendar
对象的副本,如下所示:
Calendar c= (Calendar)c2.clone();
答案 1 :(得分:3)
本声明:
c2 = c ;
会将c
的值复制到c2
。 c
的值是不是一个Calendar
对象 - 它是一个引用。在此语句之后,两个变量具有相同的值 - 对同一对象的两个引用。可以通过任一变量观察Calendar
对象的任何更改。
这就像给两个不同的人纸张给你的家庭住址 - 如果一个人使用地址到你的房子并将前门涂成绿色,那么另一个人也会看到它。
请注意,这不是Calendar
- 具体 - 这是Java中所有类的赋值行为。
(基本上区分变量,引用和对象非常重要。在正常讨论中,为了简洁起见,三者经常被错误地使用,但是你需要能够在需要时区分它们。)< / p>
请注意以下代码:
Calendar c2 = Calendar.getInstance();
c2 = c;
无意义地创建了一个新的Calendar
实例。它会更明智地写成:
Calendar c2 = c;
该代码具有相同的可见效果,但不调用Calendar.getInstance()
然后丢弃新创建的对象。
答案 2 :(得分:2)
c2 = c表示您将有2个字段指向同一个实例。如果你修改c,你也会修改c2
c2 = c.clone()克隆实例并返回另一个实例。如果修改c,则不会修改c2
答案 3 :(得分:0)
Calendar类有一个方法compareTo
。看看那个
答案 4 :(得分:0)
您甚至不需要c2 = Calendar.getInstance()
,只需直接指定'c2 = c'。