一、为什么要使用包装器类型
java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将基本类型"包装起来",使它具有了对象的性质,丰富了基本类型的操作。
java 的两大数据类型
● 基本类型(或者叫做内置类型)
● 引用数据类型
基本类型:不存在"引用"的概念,基本类型都是直接存储在内存的内存栈上面,数据本身的值就存储在栈空间里面
而Java语言里面只有这八种数据类型是这种存储模型;
引用数据类型:“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。
二、什么装箱和拆箱
装箱:自动将基本数据类型转换为包装器类型。
拆箱:自动将包装器类型转换为基本数据类型。
三、装箱和拆箱是如何实现的?
装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
示例1:
Double i1 = 100.0; Double i2 = 100.0; Double i3 = 200.0; Double i4 = 200.0; System.out.println(i1==i2); System.out.println(i3==i4);
输出结果:
false false
为什么都返回false呢,我们看下Double.valueOf()方法,就知晓了:
private final double value; public Double(double value) { this.value = value; } public static Double valueOf(double d) { return new Double(d); }
示例2:
Boolean i1 = false; Boolean i2 = false; Boolean i3 = true; Boolean i4 = true; System.out.println(i1==i2); System.out.println(i3==i4);
输出结果
true true
为什么都返回true呢,我们看下Boolean.valueOf()方法,就知晓了:
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }