包装类

包装类:
    java语言是面向对象的语言,而基本数据类型的数据不是对象
    有的时候我们需要研究使用基本数据类型的数据,需要将之转换成对象使用
    这个时候,我们可以将基本数据类型包装成引用类型。

    每一个基本数据类型都对应一个包装类
    byte------->Byte
    int-------->Integer
    short------>Short
    long------->Long
    float------>Float
    double----->Double
    char------->Character
    boolean---->Boolean
特点:
    1、都是final修饰的
    2、一经创建的对象里的数据不可变
常用构造器:
    Integer(int value)
        通过指定的基本数据类型的数据,构建一个Integer对象
    Integer(String str)
        通过指定的字符串数据类型的数据,构建一个Integer对象

包装类
常用方法:
    int intValue();
        将包装类的对象拆箱成基本数据类型

包装类

    static Integer valueOf(String s)
        将字符串转换Integer对象
        注意:将字符串转换成基本数据类型时,有可能出现运行时异常
        java.lang.NumberFormatException

包装类
    static int parseInt(String s)
        将字符串转换成10进制的基本数据类型

包装类

JDK1.5以后支持自动装箱和拆箱:

     发生了自动装箱操作,相当于调用了Integer.valueOf(5)
     5被包装成对象,存在堆中,将地址值给了变量i

包装类

     发生了自动拆箱操作,相当于i.intValue()
     对象i被拆箱成基本数据类型5存储在num空间里

包装类

      n1发生了自动拆箱即n1.intValue(),变成了基本数据类型
      n2发生了自动拆箱即n2.intValue(),变成了基本数据类型
      然后进行运算,结果为基本数据类型的30
      30再自动装箱,底层调用Integer.valueOf(30)
      变成对象n3

包装类

包装类

引用类型的常量池:

       常量池一包是用来存储以字面量赋值的数据,设计常量池为了节省空间,

     字面量存储在常量池中,当有别的对象以相同的字面量赋值时,可以直接将地址传给对象

     如果常量池中没有想要的数据,那么就在常量池中创建,之后在传给对象

包装类

 

包装类的常量池:
    当将基本数据类型进行自动装箱时,装箱后的对象的字面量,如果
    是在-128-127之间,会存储在常量池中,如果再有这样的操作时
    会先检查常量池中是否有相同字面量的对象
    每一个都有自己的常量池
    整数类型 -128-127之间
    Character 0-127之间
    Boolean true false
总结:
    1、八种包装类都是final修饰
    2、一经创建,对象内容不可变
    3、Character和Boolean的父类是Object
       其他六种的父类是Number类型
      BigDecimal:大数据类型
        如果想精确无误差运算,我们可以使用BigDecimal类型:
        提供了相应的加减乘除等功能方法进行精确运算。