自從有了范型,Java的容器操作便利了不少,但因?yàn)檫€存在int,float這里原始數(shù)據(jù)類型而磨合得還不夠好.
例如下面的這個小例子:
Map<String,Integer> map=new HashMap<String,Integer>();
map.put(
"1",1);
System.out.println(map.get(
"2"));
實(shí)際上map中并沒有鍵為"2"的值,不過代碼運(yùn)行正常,輸出為
    null
現(xiàn)在來做一點(diǎn)小改動,

   

Map<String,Integer> map=new HashMap<String,Integer>();
map.put(
"1",1);
int i=map.get("2");
System.out.println(i);
注意到只是用中間變量i暫時存放了一下取出的值,這個時候就會報錯啦:
    Exception in thread "main" java.lang.NullPointerException
仔細(xì)想想倒也覺得錯得在理,因?yàn)椴淮嬖诘膶ο罂梢砸詎ull來表示,但不存在的數(shù)字在Java中卻沒有對應(yīng)的表示(例如Ruby中就有NAN,表示這不是一個數(shù)字)。乍看之下好像也沒什么大不了,但是這樣的小缺陷使得在Java編程中想像一般類型一樣的來使用數(shù)字和容器變得不太可能,如果用一個容器來做數(shù)字的存取,則只能在取之前很小心的先查看使用的鍵值對是否已經(jīng)在容器中,而不能像一般對象的存取那樣,直接取出,通過結(jié)果來判斷罷了。
發(fā)現(xiàn)這個小紕漏僅在偶然間,JDK的文檔我看得不多,也許SUN的工程師早就在哪里提醒過大家了吧,只是我孤陋寡聞而已,大家看著玩玩。