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);
输出应该是时间"现在"然后是4小时后的时间。
打印出来时,timeForm和limitForm都会显示4小时后的时间。那是为什么?
答案 0 :(得分:1)
您将第二个日历设置为等于第一个日历,而不是创建第二个日历。因此,当您更改实例时,它会影响两个变量。如果您使limit = new GregorianCalendar();
输出将显示2个不同的值
答案 1 :(得分:1)
您想退后一步,了解Java如何处理“引用类型”。
换句话说:Java中任何类型的对象(如GregorianCalendar对象)都通过引用识别。
当你做出像
这样的作业时limit = time;
然后你不创建另一个对象。你只需要两个变量,时间和限制,它们都“指向”同一个对象。
因此,当您使用一个变量并对引用对象进行状态更改时;当然,另一个变量也“看到”了这些变化。