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

时间:2016-01-30 17:20:31

标签: java null hashmap

我有以下代码,我想打印xyz。当我这样做时,我分别期待(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));


    }

}

1 个答案:

答案 0 :(得分:3)

此处:x.set(1969, 4, 12);您在投放到Map后更改已定义的对象

永远不要更改用于Map键的对象的内部值。它会制动hashCode()值,equals()方法,之后你的地图就会被扔到垃圾箱里。