在写Java代码的过程中,一直对Java提供的一些类参数又疑问,今天查了一下,进行了解学习。
type argument cannot be of primitive type
问题:
- Java中什么是原生类型?
- Java中什么是封装类型?
Java 中的原始类型与原始封装类型
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。比如:Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类,常见的原始与对应的封装类如下:
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
引用类型和原始类型的区别:
1.两者的初始化方式不同
int i = 5; // 原始类型
Integer j = new Integer(10); // 对象引用 java 1.5以后支持自动装箱所以 Integer j = 10; 也可以
使用原始类型无须调用 new,也无须创建对象。这节省了时间和空间。混合使用原始类型和对象也可能导致与赋值有关的意外结果。
2.原始类型是类,引用类型是对象
原始类型大小比较用"==" , 引用类型大小比较用"equals"
3.引用类型可以被序列化,原始类型不行。
4.引用类型提供的方法可以灵活转换,可以扩展,原始类型不行
5.在集合类中只能使用引用类型,不能使用原始类型
6.原始类型没有null的概念,引用类型有,某些情况下需要辨别某个参数是否被初始化了,如果使用原始类型,那么0的值不知道是初始值还是没有初始化系统自动给的。
7.有些时候必须要用封装类,比如你要用
request.setAttribute(String key ,Object value);这个方法时,第二个参数为Object类型,而你要放的是一个整数的时候,那就只能放Integer不能放int。
总结:
原始类型和封装类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
int(原始类型) 一般做为数值参数就够了
integer (封装类型) 一般做类型转换的时候用的较