泛型必须是包装类类型,也就是只能代表引用类型,而不能是基本数据类型,也就是不能是原始数据类型,比如 long / int / short / byte / double / float / boolean / char ,这些都是不能被引用了。
为什么只能是包装类类型呢?
因为在程序中,有些结果有些数据可能会返回空值,转化为基本数据类型比如 int 就会发生异常,因为类似于 int 这些是没有 null 值可言的。但是基本数据类型对应的如 Integer 这些包装类类型就不会,因为对象可以为 null 值。
那,有包装类就好了呀!正所谓,Java 一切皆是对象,干嘛还需要基本数据类型呢?咋全部创建个对象不行吗?
是呀,这又是为什么?这主要是基于程序性能的考量的,基本数据类型的定义是存放在栈中的,但是我们创建对象而引出来的实际数值则是放在堆里的,堆的速度远远不如栈。而且基本数据类型变量的创建和销毁都非常快,而类定义的变量还需要 JVM 去销毁。没错,就是因为考量了程序性能的问题。