【补坑】Java自动装箱的原因

要考虑两点原因:

(1)Java中原始变量包含的值可能具有不同的长度(例如:float、double)

原始变量不能以相同的方式互换,也不能彼此互换,也不能互换Object(例如 String Object)

 

(2)泛型擦除

了避免对JVM进行根本性更改并可能破坏与旧二进制文件的兼容性,Java的创建者决定以最少侵入性的方式实现泛型类型:所有具体类型的List实际上,编译为(二进制等价物)List

  

ArrayList仅适用于Object,为对象引用保留空间,同样管理垃圾收集。因此泛型类型是Object子类。因此,如果想要一个浮点值的ArrayList,则需要在Double对象中包含double。

 

 

 综上:

Int、float、double不能互换Object,所以不能有List,List,List

而Integer、Float和double其包装类情况下,能有效替代Object,从而使泛型类型来来间接地与原语工作

如果没有装箱到对象,则需要为每次出现的参数类型编译类

 

参考:http://www.imooc.com/wenda/detail/576286

你可能感兴趣的:(Java)