他の回答は、失敗する理由を適切に説明していますが、この問題に関してエラーが発生しにくいコードを記述する方法については説明していません。タイプキャストを追加することを忘れないでください(コンパイラの助けはありません)、サフィックスプリミティブに L などを追加することは、私見では受け入れられません。
プリミティブがある場合 (およびその他の多くの場合)、コレクションの GNU trove ライブラリを使用することを強くお勧めします。たとえば、物事をプリミティブ long として内部的に格納する TLongLongHashMap があります。その結果、ボックス化/ボックス化解除で終わることはなく、予期しない動作で終わることもありません。
TLongLongHashMap map = new TLongLongHashMap();
map.put(1L, 45L);
map.containsKey(1); // returns true, 1 gets promoted to long from int by compiler
int x = map.get(1); // Helpful compiler error. x is not a long
int x = (int)map.get(1); // OK. cast reassures compiler that you know
long x = map.get(1); // Better.
等々。適切な型を取得する必要はありません。何かばかげたことをすると (int に long を格納しようとすると)、コンパイラはエラーを返します (修正またはオーバーライドできます)。
自動キャストのルールは、比較も適切に機能することを意味します。
if(map.get(1) == 45) // 1 promoted to long, 45 promoted to long...all is well
おまけとして、メモリのオーバーヘッドと実行時のパフォーマンスが大幅に向上します。