包装类
包装类的主要功能是只对于基本数据类型的对象转换而实现的,随着JDK版本的更新,包装类的功能也在随着改变,有着更多的支持。
包装类实现原理分析
Object类最大的特点是所有类的父类,并且可以接收所有的数据类型,但是在这个过程中存在问题:基本数据类型并不是一个类,所以现在如果要想将基本数据类型以类的形式处理,那么就需要对其进行包装;
装箱:将基本数据类型保存在包装类中;
拆箱:从包装类对象中获取基本数据类型;
基本数据类型进行包装处理后可以向对象一样进行引用传递,同时也可以使用Object类进行接收,但我们可以发现基本数据类型与Object类型之间的缺陷,那么JDK也发现同样的问题,
基本数据类型有8种,所以有8种包装类:
- 对象型包装类(Object直接子类):Boolean、Character;
- 数值型包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double;
Number是一个抽象类,以后只要是看见了Number都应该明确的表示它是一个数字的概念,这个类定义的方法:
方法名称 | 类型 | 描述 |
---|---|---|
public byte byteValue() | 普通 | 从包装类中获取Byte数据 |
public short shortValue() | 普通 | 从包装类中获取short数据 |
public abstract intValue() | 普通 | 从包装类中获取Int数据 |
public abstract longValue() | 普通 | 从包装类中获取long数据 |
public abstract floatValue() | 普通 | 从包装类中获取float数据 |
public abstract doubleValue() | 普通 | 从包装类中获取double数据 |
Number类中的方法就是直接提供有获取包装类中基本数据类型的功能,一共只定义有6种;
装箱与拆箱
基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装了之间就有了如下的操作关系
- 数据装箱:将基本数据类型保存在包装类中,一般可以利用构造方法完成:
- Integer类:public Integer(int value);
- Double类:public Double(double Value);
- Boolean类:public Boolean(Boolean value);
- 数据拆箱:从包装类对象中获取基本数据类型:
- 数值型包装类已经由Number类定义了拆箱的方法了;
- Boolea型:public boolean booleanValue();
从jdk1.9之后,对于包装类之中提供的构造方法就变为了过期处理,不建议用户继续使用,这是因为从jdk1.5之后为了方便处理提供的自动的装箱与拆箱操作,这种手工的模式基本上没人用了。
除了提供有自动的数学运算支持之外,使用自动装箱最大的好处是可以实现Object接收基本数据类型的操作;
但是对于包装类,需要注意“相等判断”,以后进行包装了相等判断的时候一定要使用equals完成,而包装类本身也需要考虑占位的长度;