Java 为什么我的哈希映射代码打印为空?

Java 为什么我的哈希映射代码打印为空?,java,null,hashmap,Java,Null,Hashmap,我有以下代码,我想打印x、y和z。当我这样做的时候,我期望分别是(1969,21,7),(1969,4,12),和(1969,21,7)。相反,我得到的是nullnullnull 我的问题是,为什么下面的代码打印x、y和z的空值而不是实际日期 import java.util.HashMap; import java.util.GregorianCalendar; public class GregorianCalenderTest { public static void main

我有以下代码,我想打印
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));


    }

}
这里:
x.set(1969,4,12)在放入
映射后,更改已定义的对象


切勿更改用于
Map
键的对象的内部值。它会停止
hashCode()
value、
equals()
方法,然后你的地图就会被扔进垃圾箱。

因此,即使在打印
y
z
时,这些值也会在该点变为null?你在做什么是危险的。此外,您的映射只包含一个键值对,为什么希望在这里看到3个非空值?