2016-08-19 65 views
-1
final DateFormat dateFormat = DateFormat.getDateTimeInstance() ; 
    GregorianCalendar time = new GregorianCalendar(); 
    GregorianCalendar limit = time; 
    limit.add(GregorianCalendar.HOUR_OF_DAY, 4); 

    String timeForm = dateFormat.format(time.getTime()); 
    String limitForm = dateFormat.format(limit.getTime()); 
    System.out.println(timeForm); 
    System.out.println(limitForm); 

输出应该是时间“now”,然后是4小时后的时间。当我更改GregorianCalendar的一个实例时,另一个实例发生更改

打印出来时,timeForm和limitForm都会显示4小时后的时间。这是为什么?

+0

那里只有一个实例。一个变量不是一个实例,而是一个参考。 'GeorgianCalendar limit = time;'不会创建'GeorgianCalendar'的新实例,它只是告诉'limit'引用'time'引用的同一个对象。 –

回答

1

您将第二个日历设置为等于第一个日历,而不是创建第二个实例。所以当你改变实例时,它会影响两个变量。如果您制作limit = new GregorianCalendar();,则输出将显示2个不同的值

1

您想退一步阅读Java如何处理“引用类型”。

换句话说:任何在Java中是某种对象的东西(如GregorianCalendar对象)都是通过引用来标识的。

当你做出这样

limit = time; 

的转让,那么你是不是创建另一个对象。你只需要两个变量,时间和限制,这两个变量都指向同一个对象。

因此,当您使用一个变量并对引用对象进行状态改变时,当然其他变量也“看到”这些变化。

相关问题