2016-01-30 98 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

相關問題