1.为什么需要包装类
Java提供了两个类型系统,基本数据类型与引用数据类型。使用基本数据类型在于效率,然而当使用只针对对象的API或型特性(例如泛型),我们该怎么办呢?例如:
//情况1:方法形参
Object类的equals(Object obj)
//情况2:方法形参
ArrayyList类的add(Object obj)
//没有如下的方法:
add(int number)
add(double d)
add(boolean b)
//情况3:泛型
Set<T>
List<T>
Cllection<T>
Map<K,V>
(其中T表示的是引用数据类型)
2.有哪些包装类
Java针对八种基本数据类型定义了相应的引用类型:包装类(封装类)。有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
表格前七个数值类型的父类是Number,默认继承于Number。
封装以后的,内存结构对比:
public static void main(String[] args){
int num=520;
Integer obj=new Integer(520);
}
3.包装类的使用
1.为什么要使用包装类?
为了使得基本数据的变量具备引用数据类型变量的相关特性(比如:封装性、继承性、多态性),我们给各个基本数据类型的变量都提供了对应的包装类。
2.(掌握)基本数据类型对应的包装类类型 。(在上面的表格里)
3.掌握基本数据类型与包装类之间的转换。
3.1为什么需要转换
>一方面,在有些场景下,需要使用基本数据类型对应的包装类的对象。此时需要将基本数据类型的变量转换为包装类的对象。比如:ArrayList的add(Object obj);Object类的equals(Object obj)
>对于包装类来讲,既然我们使用的是对象,那么对象是不能进行+、-、 *、 /等运算的。
3.2如何转换
(装箱)基本数据类型--->包装类:
1.使用包装类的构造器
public void test1(){
int i1=10;
Integer ii1=new Integer(i1);
System.out.println(ii1.toString());
}
2.(建议)调用包装类的valueof(xxx xx)
//推荐使用
public void test1(){
int i2=10;
Integer ii2=Integer.valueof(i2);
}
(拆箱)包装类--->基本数据类型:调用包装类的xxxValue()
public void test2(){
Integer ii1=new Integer(10);
int i1=ii1.intValue();
i1=i1+1;
}
注意:原本使用基本数据变量的位置,改装成包装类以后,对于成员变量来说,其默认值变化了!
4.jdk5.0新特性:自动装箱、自动拆箱
public void test(){
//自动装箱: 基本数据类型--->包装类
int i1=10;
Integer ii1=i1;//自动装箱
System.out.println(ii1.toString());
int i2==ii1;//自动拆箱
}