zoukankan      html  css  js  c++  java
  • 第三节:享元模式——源码分析

    一、享元模式在 JDK-Integer的应用源码分析

      1、Integer 中的享元模式

      2、代码分析

        先来看下面一个案例:

     1 public class FlyWeight {
     2     public static void main(String[] args) {
     3 
     4         // 如果 Integer.valueOf(x) x 在-128~127之间,直接返回,就是使用享元模式返回
     5         //如果不在这个范围之内,则仍然 new 然后返回
     6 
     7         /**
     8          * 1、在 valueOf 方法中,先判断是否在 IntegerCache 数组中,
     9          *  如果不在,就创建新的一个 Integer 对象,
    10          *  否则就直接从 cache(缓冲池)中返回
    11          * 2、valueOf 方法就使用到 享元模式
    12          * 3、如果使用valueOf 方法得到一个 Integer 实例,范围到-128~127,执行速度比new 快
    13          */
    14 
    15         Integer x = Integer.valueOf(127);
    16         Integer y = new Integer(127);
    17         Integer z = Integer.valueOf(127);
    18         Integer w = new Integer(127);
    19         System.out.println(x.equals(y)); // ? true
    20         System.out.println(x == y); // ?     false
    21         System.out.println(x == z); // ?     true
    22         System.out.println(w == x); // ?     false
    23         System.out.println(w == y); //       false
    24 
    25         Integer x1 = Integer.valueOf(200);
    26         Integer x2 = Integer.valueOf(200);
    27         System.out.println(x1 == x2); //    false
    28     }
    29 
    30 }

      3、源码分析:

        我们来看一下 Integer.valueOf() 方法: 

                

       可以看出,只要给定的 i 在 low-high 的范围内,就会从一个 IntegerCache中获取一个 Integer 对象,否则将新创建一个并返回。

        可以看出 IntegerCache 是 Integer 中的一个内部类,在内部声明了一个 Integer数组,在静态代码块中给数组中赋值。

  • 相关阅读:
    前端数据可视化插件(二)图谱
    前端数据可视化插件(一)图表
    CSS性能优化
    HTML性能优化
    github前端资源
    javascript生成n至m的随机整数
    原生js获取元素样式
    模式二之框架模式
    kendo-ui的使用和开发自己的组件
    pycharm安装报错Non-zero exit co?
  • 原文地址:https://www.cnblogs.com/niujifei/p/14353104.html
Copyright © 2011-2022 走看看