美文网首页
Java装箱与拆箱

Java装箱与拆箱

作者: BestFei | 来源:发表于2020-04-07 14:29 被阅读0次

    一、基础知识

    1、Java把内存划分成两种:一种是栈内存,另一种是堆内存。
    2、int是基本类型,直接存数值;而 Integer是类,产生对象时用一个引用指向这个对象。
    3、封装类位于java.lang包中。
    4、封装类是引用传递,而基本类型是值传递。
    5、基本类型的变量和对象的引用变量都是在函数的栈内存中分配 ,而实际的对象是在存储堆内存中。
    6、Java中基础数据类型与它们对应的包装类见下表(共8种):

    原始类型 包装类型
    boolean Boolean
    byte Byte
    char Character
    float Float
    int Integer
    long Long
    short Short
    double Double

    7、"==" 和 "equals()" 方法
    ”==“可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象。
    "equals()": 比较的是引用数据类型,根据不同的数据类型调用不同的equals方法。在特殊情况下可以重写equals方法。

    二、装箱与拆箱的定义

    装箱:(原始类型 to 包装类型)把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征。

    Integer a = 2;
    可以理解为:将数值2装在一个类型为Integer 的箱子里,并把a指向2这个箱子。
    Integer b = new Integer(2);
    显示装箱。生成一个新的箱子,并且这个箱子的值为2,让b指向这个箱子。
    

    拆箱:(包装类型 to 原始类型)与装箱过程相反,把包装类型转换成基本类型。

    int v = a.intValue();
    将里面int的值取出来。
    

    拆箱的意义:进行运算的时候,因为对象是不能直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除。

    三、装箱与拆箱的代码实现

    以int 和Integer 为例,
    装箱就是调用Integer 的valueOf方法new一个Integer 并赋值,
    拆箱就是调用Integer 对象的int Value方法并赋值返回给int 。

    Integer中的valueOf()方法
    在Java中,会对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象,否则创建新的Integer对象。
    valueOf()方法是个静态方法。当传进来的变量值在这个区间之内,直接用IntegerCache.cache[]数组里面的数返回,否则new一个新对象。
    Integer的最大值为2^31 -1,最小值为 -2^31 。初始化Integer后,IntegerCache会缓存[-128,127]之间的数据,这个区间的上限可以配置,取决于java.lang.Integer.IntegerCache.high这个属性。所以Integer在初始化完成后会缓存[-128,max]之间的数据。cache属于常量,存放在java的方法区中。

    相关文章

      网友评论

          本文标题:Java装箱与拆箱

          本文链接:https://www.haomeiwen.com/subject/ntngphtx.html