我们知道java中所有到的类型要么就是引用类型和要么就是原始数据类型,其中原始数据类型有其相应的包裹类(wrapper class),包括:byte(byte), short(short), integer(int), long(long), float(float), double(double), boolean(bool), char(char)。
我们将原始数据类型及其包裹类间的互相转换称为封箱及拆箱操作。
generics为我们提供了自动封拆箱的功能,记住在设定泛型的类型参数(type parameter时,只能使用引用类型,绝对不能使用原始数据类型。我们以以下的示例来说明:
example1.2.1
public int sum(list
int s = 0;
for(int n : ints) {s += n;}
return s;
}
在该例子,我们看到在遍历时,当ints把值绑定到n时,进行了拆箱操作。
example1.2.2
public integer suminteger(list
integer s = 0;
for(integer n : ints) { s += n;}
return s;
}
在这里我们看到在进行s += n这一步时,反复做了拆箱及封箱操作,我们看到虽然做的是同一件事,但在jvm中执行的效率相差幅度在60%左右。
在讨论封,拆箱时我们要留意一下以下两个问题:
闽公网安备 35060202000074号