Java 之 泛型 与 包装类
泛型
泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念。
定义泛型类时,"<>"内一般给 T 或者 E
泛型代码示例:
class MyArrayList{
public Object[] elem;
public int useSize;
public MyArrayList() {
this.elem = new Object[10];
this.useSize = 0;
}
public void add(Object data){
this.elem[this.useSize] = data;
this.useSize++;
}
public Object getPos(int pos){
return this.elem[pos];
}
}
public class TestDemo2 {
public static void main(String[] args) {
MyArrayList myArrayList = new MyArrayList();
myArrayList.add(1);
myArrayList.add(2);
myArrayList.add("改变");
int a = (int)myArrayList.getPos(0);
}
}
若创建了顺序表中的元素为Object类型,可放入任意类型的数据,因为Object是java中所有类的祖先类。
但要想用int或其他数据类型接收时,需要强制类型转换
< T >, T 为占位符,表示当前类是泛型类
- 泛型类不能new 一个泛型类型的数组
泛型的意义:
1.自动进行类型的检查 (注意:并不是进行类型的替换,只是用所给类型进行检查,并未替换)
2.自动进行类型的强制类型转换
泛型到底是怎么编译的?
擦除机制-》擦除成->Object,并不是替换成Object,泛型并不参与类型的组成
- 在使用泛型类时一定要加 <>,指定类型
MyArrayList2 <String> myArrayList2 = new MyArrayList2;
"<>"并不参与类型的组成,myArrayList2的类型是MyArrayList2
- 泛型类型数组不能new
- 简单类型不能作为泛型的参数,需要其对应的包装类
包装类
基本数据类型与其对应的包装类:
装箱
装箱/装包:将简单类型变为对应的包装类
自动装箱的实现:调用的是Integer.valueOf()方法
自动装箱示例:
int a = 10;
Integer i = 10;
手动装箱示例:
int a = 10;
Integer i = Integer.valueOf(a);//手动装箱
拆箱
拆箱/拆包:将包装类变为对应的简单类型
自动拆箱的实现:调用 intValue()
自动拆箱示例:
Integer i = 10;
int a = i;
手动拆箱示例:
Integer integer = new Integer(a);//手动拆箱
int n = integer.intValue();
- 在装箱时,将 int类型 -128到127之间的数已经存到数组中;若int类型装箱的数据不在该范围内,则new了一个对象返回。