什么叫包装类呢,我们来看下对应的下面声明,看看大家能不能看明白:

  1. Animal animal = new Animal();

这行代码表示的是,声明Animal类型的引用指向Animal的对象,animal就是它的实例化名称,代表的就是一个animal对象

  1. int number = 16;

这行代码表示的是,声明一个int类型的对象,名称为number,并且初始值为16

number不是一个对象,但是animal表示的是一个对象。前面我们讲面向对象的时候给大家讲解了,对应的Java是一个面向对象的语言。并且我们一直说在Java里面,万物皆对象。
所以number从Java的面向对象理念来说,看作是一个对象,但是从语法层面来说,不是一个对象。这就违背了Java里面万物皆对象这个概念。

所以,Java里面number变成对象,那首先有一个类,才能变成对象。那首先就需要有一个类跟int关联起来

  1. public class MyInt{
  2. private int num = 16;
  3. }

把这个int声明的变成一个私有的成员变量,然后声明这个类,就是new 这个对象,这样我们的number就变成了对象里面包含的。

通常情况下,基本数据类型的变量不是对象,为了满足万物皆对象的理念:需要对基本数据类型的变量进行打包封装处理变成对象,而负责将这些变量声明为成员变量进行对象化处理的相关类,叫做包装类。

主要作用就是把基本数据类型变量变成对象。

分类

以上是我们自己如果写成类的情况下需要这样写,但是真正在Java里面,是不需要我们做这些操作的,因为Java官方已经帮我们写好了这8个基本数据类型的包装类。

基本类型 包装类
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
char java.lang.Character
boolean java.lang.Boolean
  • 可以看到 除了int、char之外其它的都是首字母大写
  • 包装类都是在java.lang包下
  • 包装类:就是8大基本数据类型的变量打包成对象,满足了Java的万物皆对象。

Integer

通过Integer来给大家看下对应的整数包装类怎么使用

首先,给大家看一下对应的Integer的概念。

概念

java.lang.Integer类内部包装了一个int类型的变量作为成员变量。
主要用于实现对==int类型的包装并提供int类型到String类之间的转换==等方法。

常量

常量 功能介绍
MAX_VALUE int类型最大值,2^31-1 0x80000000
MIN_VALUE int类型最小值,即-2^31 0x7fffffff
SIZE int类型采用二进制补码形式的位数,32
BYTES int类型所占的字节个数
TYPE int类型的Class实例
  1. //1、打印Integer类中常量值
  2. System.out.println("Integer的最大值:" + Integer.MAX_VALUE);
  3. System.out.println("Integer的最小值:" + Integer.MIN_VALUE);
  4. System.out.println("表示二进制的位数:" + Integer.SIZE);
  5. System.out.println("所占字节的个数是:" + Integer.BYTES);
  6. System.out.println("对应int 的 Class 实例:"+ Integer.TYPE);
  1. Integer的最大值:2147483647
  2. Integer的最小值:-2147483648
  3. 表示二进制的位数:32
  4. 所占字节的个数是:4
  5. 对应int Class 实例:int

方法

方法 功能介绍
Integer(int value) 参数构造方法,过时
static String toString(int i) 重写
static Integer valueOf(int i) int—>Integer
static Integer valueOf(String s) String—>Integer
int intValue() Integer—>int
static int parseInt(String s) String—>int
  1. Integer integer = new Integer(99);//被弃用
  2. System.out.println("integer = "+ integer);//自动调用toString 99

可以看到对应的构造方法已经被弃用了,源码里面说明了从java9之后就不这样声明使用了
对应的toString方法重写了,所以可以打印出来内容值。
如果不用这个声明,那应该用什么,使用valueOf来进行声明

int—>Integer
  1. //上述方法过时,建议用valueOf取代,相当于从int类型转到Integer
  2. Integer in1 = Integer.valueOf(66);
  3. System.out.println(in1);

String—>Integer
  1. //相当于从String类型转到Integer
  2. Integer integer1 = Integer.valueOf("34");
  3. System.out.println(integer1);

Integer—>int
  1. //Integer类型转为int类型
  2. int i = integer.intValue();
  3. System.out.println("获取到的整数是:"+ i);

Integer—>String
  1. Integer integer2 = 88;
  2. String s = integer2.toString();

String—>int
  1. int i2 = Integer.parseInt("200");
  2. System.out.println("字符串转换为整数的结果是:"+i2);
  3. //java.lang.NumberFormatException: For input string:
  4. //编译ok,运行报错 数字格式化异常,因为里面有字母
  5. int i3 = Integer.parseInt("200d");
  6. System.out.println(i3);

拆装箱

装箱

int类型转换为Integer,这样的操作叫装箱

就是把箱子打开,然后把对应内容放进去。其实就是一个打包的过程

拆箱

从Integer转换到int类型,这个过程叫拆箱

这个过程像收快递,把里面的东西取出来

自动拆装箱

在java5之前进行装箱需要用到valueOf,拆箱用intValue;但是java5以后就可以自动拆装箱

  1. Integer integer2 = 88; //直接通过赋值运算符实现自动装箱
  2. int i1 = integer2;//直接通过赋值运算符实现自动拆箱

自动拆装箱的底层也是调用那两个方法,只是在书写代码的时候,我们不需要去关注

自动装箱池

在Integer类的内部提供了自动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使用
该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。

  1. Integer integer3 = 127;//128;
  2. Integer integer4 = 127;//128;
  3. Integer integer5 = new Integer(127);//new Integer(128);
  4. Integer integer6 = new Integer(127);//new Integer(128);
  5. System.out.println(integer3 == integer4); //true //false //自动装箱池
  6. System.out.println(integer3.equals(integer4)); //true //true
  7. System.out.println(integer5 == integer6); //false //false
  8. System.out.println(integer5.equals(integer6)); //true //true

Java默认装箱范围是-128~127,如果想要调整这个装箱范围「涉及到JVM调优」
可以使用-XX:AutoBoxCacheMax=<size>进行大小设置

Double

小数类型的包装类,这里我们用浮点类型包装类来演示: Double

概念

java.lang.Double类型内部包装了一个double类型的变量作为成员变量,主要用于实现对double
类型的包装并提供double类型到String类之间的转换等方法。

常量

常量 功能介绍
SIZE double类型采用二进制补码形式的位数,64
BYTES double类型所占的字节个数
TYPE double类型的Class实例

方法

方法 功能介绍
Double(double value) 参数构造方法,过时
static String toString(double d) 重写
static Double valueOf(double d) double—>Double
static Double valueOf(String s) String—>Double
double doubleValue() Double—>double
static double parseDouble(String s) String—>double
static boolean isNaN(double v) 判断值是否为非数字

double—>Double

  1. Double d1 = Double.valueOf(3.14159266);
  2. System.out.println("d1 = :" + d1);

String—>Double

  1. Double d1 = Double.valueOf("3.14159266");
  2. System.out.println("d1 = :" + d1);

Double—>double

  1. double d = d1.doubleValue();
  2. System.out.println("d = :" + d);

Double—>String

  1. String s = d1.toString();

String—>double

  1. double v = Double.parseDouble("2.1545");

是否为非数字

  1. System.out.println("d2对象判断的结果:"+d2.isNaN());
  2. Double d4 = Double.valueOf(0.0d / 0.0);
  3. System.out.println("d4对象判断的结果:"+d4.isNaN());

拆装箱

  1. //java5以后开始自动拆装箱
  2. Double d2 = 3.1415926;
  3. double d3 = d2;
  • double没有自动装箱池概念

Number

java.lang.Number类是个抽象类,是上述类的父类来描述所有类共有的成员
包装类 - 图1

Boolean

概念

java.lang.Boolean类型内部包装了一个boolean类型的变量作为成员变量,主要用于实现对
boolean类型的包装并提供boolean类型到String类之间的转换等方法。

常量

常量 功能介绍
TRUE 为true的对象
FALSE 为false的对象
TYPE boolean类型的Class实例

方法

方法 功能介绍
Boolean(boolean value) 参数构造方法,过时
static String toString(boolean b) 重写
static Boolean valueOf(boolean b) boolean—>Boolean
static Boolean valueOf(String s) String—>Boolean
boolean booleanValue() Boolean—>boolean
static boolean parseBoolean(String s) String—>boolean

boolean—>Boolean

  1. Boolean aBoolean = Boolean.valueOf(false);
  2. Boolean b2 = true;

String—>Boolean

  1. Boolean b = new Boolean("true");
  2. Boolean b1 = Boolean.valueOf("true");

Boolean—>boolean

  1. Boolean b2 = true;
  2. boolean b4 = b1.booleanValue();
  3. System.out.println(b4);
  4. boolean b3 = b2;

String—>boolean

  1. //方法执行原理:只要参数值不是true,TRUE,则结果就是false
  2. boolean aFalse = Boolean.parseBoolean("dsfa");
  3. System.out.println(aFalse);

包装类(Wrapper)的使用总结

  • 基本数据类型转换为对应包装类的方式

调用包装类的构造方法或静态方法valueOf()

  • 获取包装类对象中基本数据类型变量数值

调用包装类中的xxxValue方法

  • 字符串转换为基本数据类型的方式

调用基本数据类型对应的包装类中的parseXxx方法