2016-01-30 29 views
1

我有以下代码,我想打印xyz。当我这样做时,我预计分别为(1969, 21, 7),(1969, 4, 12)(1969, 21, 7)。相反,我得到nullnullnull为什么我的哈希映射代码打印为空?

我的问题是,为什么下面的代码为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)); 


    } 

} 

回答

3

这里:x.set(1969, 4, 12);您更改已物体投入Map之后定义。

切勿更改用于Map键的对象的内部值。它刹车hashCode()值,equals()方法,然后你的地图可以扔到垃圾箱。

+0

所以,即使在打印'y'和'z'时,那些值也会变成null? –

+0

你在做什么是危险的。此外,你的映射只包含一个键 - 值对,为什么你期望在这里看到3个非空值? – Andremoniy