是否可以将Calendar c设置为Calendar c2?

时间:2013-04-25 12:23:32

标签: java

我有:

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?

,那么这最后一个语句是否正确

5 个答案:

答案 0 :(得分:10)

虽然c2 = c似乎可行,但这不是您想要的:两个变量都将指向同一个日历实例。作为此分配的结果,对c所做的任何更改也将在c2中,反之亦然。

您可以使用clone()方法制作Calendar对象的副本,如下所示:

Calendar c= (Calendar)c2.clone();

答案 1 :(得分:3)

本声明:

c2 = c ; 

会将c的值复制到c2c的值是不是一个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。看看那个

CompareTo()

答案 4 :(得分:0)

您甚至不需要c2 = Calendar.getInstance(),只需直接指定'c2 = c'。