我有以下代码,我想打印x
,y
和z
。当我这样做时,我分别期待(1969, 21, 7)
,(1969, 4, 12)
和(1969, 21, 7)
。相反,我得到null
null
null
。
我的问题是,为什么下面的代码为x,y和z而不是实际日期打印为空?
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));
}
}
答案 0 :(得分:3)
此处:x.set(1969, 4, 12);
您在投放到Map
后更改已定义的对象。
永远不要更改用于Map
键的对象的内部值。它会制动hashCode()
值,equals()
方法,之后你的地图就会被扔到垃圾箱里。