我有以下代码,我想打印xyz。当我这样做时,我分别期望(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()方法,然后可以将地图丢到垃圾箱。

09-29 21:14