包装类和泛型

文章目录


前言

菜鸟大可的第二篇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; // 自动拆箱 
  1. 注意 :
    //此代码会输出什么?
    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
    通过进入valueOf方法可知:所以有效范围是【-128 127】                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

二、泛型:对类型实现参数化

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
	}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值