文章目录
前言
菜鸟大可的第二篇Java—数据结构——包装类和泛型。继续加油 争取一周四更!
一、包装类
在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了 一个包装类型。
1.基本数据类型:
基本数据类型 | |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolea |
2.装箱与拆箱:
//装箱操作,新建一个Integer类型对象,将i的值放入对象的某个属性中
Integer ii=Integer.valueOf(i);
Integer ij=newInteger(i);
//拆箱操作,将Integer对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();
(直接ctrl 左击 进入valueOf方法)
int i = 10;
Integer ii = i; // 自动装箱
Integer ij = (Integer)i; // 自动装箱
int j = ii; // 自动拆箱
int k = (int)ii; // 自动拆箱
- 注意 :
通过进入valueOf方法可知:所以有效范围是【-128 127】//此代码会输出什么? public static void main(String[] args) { Integer a = 127; Integer b = 127; Integer c = 128; Integer d = 128; System.out.println(a == b); System.out.println(c == d); } 输出结果: Ture False
二、泛型:对类型实现参数化
1.存在意义
1.编译的时候,帮我们进行类型的检查
2.编译的时候,帮我们进行类型的转换
3.泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查
JVM里没有泛型!
2.如何使用
泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象
MyArray<Integer> list = new MyArray<Integer>();
注意:泛型只能接受类,所有的基本数据类型必须使用包装类!
3.小结
1. 泛型是将数据类型参数化,进行传递
2. 使用 表示当前类是一个泛型类
3. 泛型目前为止的优点:数据类型参数化,编译时自动进行类型检查和转换
4.不能new泛型类型的数组
4.代码改进
class MyArray {
public Object[] array = new Object[10];
public Object getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,Object val) {
this.array[pos] = val;
}
}
public class TestDemo {
public static void main(String[] args) {
MyArray myArray = new MyArray();
myArray.setVal(0,10);
myArray.setVal(1,"hello");//字符串也可以存放
String ret = myArray.getPos(1);//编译报错
System.out.println(ret);
}
}
改进后:
class MyArray<T> {
// <T> 代表占位符
public T[] array = (T[])new Object[10];//1
public T getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,T val) {
this.array[pos] = val;
}
}
public class TestDemo {
public static void main(String[] args) {
MyArray<Integer> myArray = new MyArray<>();//2
myArray.setVal(0,10);
myArray.setVal(1,12);
int ret = myArray.getPos(1);//3
System.out.println(ret);
myArray.setVal(2,"bit");//4
}
}