要考虑两点原因:
(1)存在长度与变量转换问题
Java中原始变量包含的值可能具有不同的长度(例如:float、double)
且原始变量不能彼此互换,也不能互换Object(例如 String Object)
(2)泛型擦除
避免了对JVM进行根本性更改(可能破坏与旧二进制文件的兼容性),Java的创建者决定以最少侵入性的方式实现泛型类型:所有具体类型的List<T>实际上,编译为(二进制等价物)List<Object>
综上:
Int、float、double不能互换Object,所以不能有List<int>,List<float>,List<double>
而Integer、Float和Double在其包装类情况下,能有效替代Object,从而使泛型类型能间接地与原语工作
如果没有装箱到对象,则需要为每次出现的参数类型编译类