zoukankan      html  css  js  c++  java
  • Java包装类缓存

    1.基本概念

      在jdk1.5及之后的版本中,Java在5大包装类中(Byte,Charactor,Short,Integer,Long)增加了相应的私有静态成员内部类为相应包装类对象提供缓存机制,Integer包装类的内部缓存类源码如下:

      正如源码中所指,在自动装箱的基础上,缓存机制才会发生作用,当包装类加载时,内部类会初始化一个长度为((high-low)+1)的包装类类型数组,low有固定值为-128,而high的默认值为127,还可以通过系统配置文件进行修改,自定义high的取值范围是127-----(Interger.MAX_VALUE+127),Integer.MAX_VALUE是int类型变量的最大正数取值,其缓存机制是:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128----127的范围内,如果满足条件,则会从缓存中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。

    2.经典笔试题

     1 /**
     2  * Created by andrew on 2017/2/24.
     3  */
     4 public class Test {
     5     public static void main(String[] args) {
     6         Integer a = new Integer(100);
     7         Integer b = new Integer(100);
     8         // 输出为false,非自动装箱机制实现,属于两个不同的对象,所以返回false.
     9         System.out.println(a == b);
    10 
    11         Integer a1 = 100;
    12         Integer b1 = 100;
    13         // 输出为true," == "在此处比较的是两边对象的地址值,
    14         // 在定义b1对象的时候,因为100在-128---127的范围内,而且寻找到了缓存对象a1,
    15         // 所以引用b1直接指向a1对象,不会新建对象,两个引用指向是同一个对象,所以返回true.
    16         System.out.println(a1 == b1);
    17 
    18         Integer a2 = 1000;
    19         Integer b2 = 1000;
    20         // 输出为false," == "在此处比较的是两边对象的地址值,
    21         // 在定义b2对象的时候,因为1000不在-128---127的范围内,不会实现缓存机制,因此会新建包装类对象,
    22         // 属于两个不同的对象,所以返回false.
    23         System.out.println(a2 == b2);
    24 
    25 
    26     }
    27 }
  • 相关阅读:
    子网掩码的作用与IP网段的划分
    DHCP服务器
    Anaconda安装、更新第三方包
    time模块的使用
    TensorFlow安装
    机器学习-线性回归
    机器学习
    Pyhton-类(2)
    python-类(1)
    Python-函数
  • 原文地址:https://www.cnblogs.com/coderls/p/6438069.html
Copyright © 2011-2022 走看看