zoukankan      html  css  js  c++  java
  • 自动装箱与拆箱引发的享元设计模式

    1. /** 
    2.  * 自动装箱与拆箱 
    3.  */  
    4. public class Autoboxing {  
    5.   
    6.     public static void main(String[] args) {  
    7.         Integer num1 = 20;          //自动装箱  
    8.         int num2 = new Integer(20);     //自动拆箱  
    9.         System.out.println(num2 == num1);   //true  
    10.           
    11.         //-128~127之间的同一个Intege对象相比为true  
    12.         Integer num3 = 128;  
    13.         Integer num4 = 128;  
    14.         System.out.println(num3 == num4);   //false  
    15.           
    16.         Integer num5 = -129;  
    17.         Integer num6 = -129;  
    18.         System.out.println(num5 == num6);   //false  
    19.     }  
    20. }  

    代码说明:

    Integer num1 = 20;自动将int类型的整数20转换一个Integer对象,赋给num1;(装箱)

    int num2 = new Integer(20);  自动将Integer对象的值20转换成int类型(拆箱)

    在JDK5.0之前,这种方式是不能通过编译的,比如上述示例在JDK1.4只能通过new的方式创建Integer对象。

    由自动装箱与拆箱引发的享元模式:

    1. //存储-128~127之间的Integer对象  
    2. Integer num3 = 128;  
    3. Integer num4 = 128;  
    4. System.out.println(num3 == num4);   //false  
    5.           
    6. Integer num5 = -129;  
    7. Integer num6 = -129;  
    8. System.out.println(num5 == num6);   //false  

    因 为较小的整数用的频率比较广泛,所以JAVA虚拟机启动后将-128~127之间整数对像缓存起来,这样每次在使用-128~127之间的整数对象时不用 频繁的创建,而是直接去缓存池里取,如果缓存池里存在该数值,就直接取出来,如果不存在,则创建一新的对象返回,这样一来即可节省内存资源。这种将常用或 公共的数据缓存起来反复复用的方式,叫做享元模式。

  • 相关阅读:
    Oozie时bin/oozied.sh start或bin/oozied.sh run出现Bootstrap进程无法启动,http://bigdatamaster:11000/oozie界面也无法打开?
    [ACM] POJ 2253 Frogger (最短路径变形,每条通路中的最长边的最小值)
    Echoprint系列--Android编译与调用
    shell编程之文本与日志过滤
    C++中搜索、截取字符串
    Swift中的UIKit重力学
    hbase0.96 put流程 源码分析
    [Docker]初次接触
    工作日志2014-08-25
    Flex和Servlet结合上传文件报错(二)
  • 原文地址:https://www.cnblogs.com/starhu/p/5605359.html
Copyright © 2011-2022 走看看