我有以下代码,我想打印x
,y
和z
。当我这样做时,我分别期望(1969, 21, 7)
,(1969, 4, 12)
和(1969, 21, 7)
。相反,我得到null
null
null
。
我的问题是,为什么下面的代码为x,y和z而不是实际日期打印null?
import java.util.HashMap;
import java.util.GregorianCalendar;
public class GregorianCalenderTest {
public static void main(String[] args) {
HashMap st = new HashMap();
GregorianCalendar x = new GregorianCalendar(1969, 21, 7);
GregorianCalendar y = new GregorianCalendar(1969, 4, 12);
GregorianCalendar z = new GregorianCalendar(1969, 21, 7);
st.put(x, "human in space");
x.set(1969, 4, 12);
System.out.println(st.get(x));
System.out.println(st.get(y));
System.out.println(st.get(z));
}
}
最佳答案
此处:x.set(1969, 4, 12);
放入Map
后,更改已定义的对象。
切勿更改用于Map
键的对象的内部值。它会制动hashCode()
值和equals()
方法,然后可以将地图丢到垃圾箱。