包装类介绍
拓展阅读: Java8新特性
1.包装类的作用
Java是一种面向对象的编程语言,却存在几个不具有对象特征的异类;他们不能像对象一样进行属性和方法的调用,也无法进行相互之间的对象化处理。包装类的存在就是为了解决这些问题,让他们能够像对象一样进行交互。
通过包装类可以让基本数据类型获取对象一样的特征,行使对象相关的权益。
2.基本数据类型和包装类的对应
3.包装类常用方法
3.1)Java中所有的包装类都是存放在【java.lang】这个包里面的;
3.2)所有的包装类都是final修饰的,即是不能被继承的,是没有子类的;
3.3)基本数据类型分为三大类:数值型、字符型、布尔型;他们的直接父类不同;
所有的数值型都是继承Number类的;
字符类型和布尔类型的直接父类是Object类;
3.4)Integer类还实现了Comparable接口,关于这个接口后续再深入了解
3.5)Integer的属性和方法
(对于Integer中的方法,可以看下API中的描述,自测一下,简单了解即可)
基本数据类型和包装类之间的转换
1.装箱和拆箱的简单示例程序
装箱和拆箱:基本数据类型和对应包装类之间的转换
装箱和拆箱都有自动和手动两种方式,以下为简单示例:这篇博客主要掌握装箱和拆箱的基本操作即可
public class WrapTestOne {
public static void main(String[] args) {
// 装箱:基本数据类型转换成包装类
// 1.自动装箱
int t1 = 2;
Integer t2 = t1; // 编译器会把t1中的数据提取出来,通过实例化的方式,来构成t2对象
// 2.手动装箱
Integer t3 = new Integer(t1);
// 测试
System.out.println(t2); // Integer类的同String()方法是输出其数据值
System.out.println(t3);
/******************************************************/
// 拆箱:把包装类转换成基本数据类型
// 1.自动拆箱
int t4 = t2;
// 2.手动开拆箱
int t5 = t2.intValue(); // intValue()方法的作用:把Integer对象的值转换为对应整型数据值
double t6 = t2.doubleValue(); // doubleValue()方法把Integer对象的值转换为对应double数据值
// 还有其他类似于intValue()方法和doubleValue()方法的方法
// 测试
System.out.println(t2); // Integer类的同String()方法是输出其数据值
System.out.println(t4);
System.out.println(t5);
System.out.println(t6);
}
}
2.装箱和拆箱分析
下图提供了一种新的自动装箱的方法:通过valueOf()方法。
相较来看,自动装、拆箱,表面是自动转换的方式(帮助开发者忽略了底层的调用)
……………………………………………………
1.基本数据类型和包装类的区别
这部分主要是加强对包装类的整体感官
1.基本数据类型和字符串之间的相互转换
public class WrapTestTwo {
public static void main(String[] args) {
// 一:基本数据类型转成字符串:通过包装类的toString方法
int t1 = 2;
String s = Integer.toString(t1);
System.out.println(s);
// 二:字符串转换成基本数据类型
// 第一种:通过包装类的parse方法
int t3 = Integer.parseInt(s);
System.out.println(t3);
// 第二种:先通过Integer.valueOf()把字符串转成包装类,然后再自动拆箱成基本数据类型
int t4 = Integer.valueOf(s);
System.out.println(t4);
}
}
2.包装类对象的初始值
其包装类的默认初始值为null。
3.包装类对象间的比较
……………………………………………………
……………………………………………………
原因解释:
在执行Integer four = 100;这个自动装箱操作时,背后实际执行的是 Integer four = Integer.valueOf(100);
Java为了提高运行效率,在Integer.valueOf()这个方法执行的过程中,提供了一个类似于常量数组的常量缓存区(或称对象池);
即在实际中:执行Integer three = 100;时,其会在缓存区中查找是否有100这个对象,此时还没有,所以这个时候执行的是:Integer three = new Integer(100);即会隐式的使用new关键字去实例化一个数值为100的对象;
在执行Integer four = 100;时,缓冲区中一查,发现有数值为100的对象,即这个时候拿过来直接用就行了,,,即这个时候four直接指向这个对象;即这个时候three和four指向了同一个对象,二者的值是一样的。
4.附带内容
……………………………………………………
……………………………………………………
这个主要是看下char类型
……………………………………………………、
包装类的常见问题
包装类的常见问题(单纯罗列,仅供浏览)
下图说的会引发空指针异常的情况很重要: