面试-java的享元模式

java的享元模式

  1. java中的八大基本数据类型都有对应的包装类, 包装类的初始化操作有两种
    • new Integer()
    • Integer.valueOf()
  2. 在使用valueOf()初始化方式时, 底层会使用XxxCache()这个类来做一个缓存, 缓存规定了一个区间:
    • 区间内的初始值, 会先查找缓存, 如果缓存有, 就直接从缓存获取, 不会分配新内存

    • 如果超过区间的值, 则直接分配新内存

        // false, 创建不同的对象, 保存的地址不同
        Integer i1 = new Integer(1);
        Integer i2 = new Integer(1);
        System.out.println(i1 == i2); // == 判断内存地址
      
      
        // true
        Integer i3 = Integer.valueOf(1);
        Integer i4 = Integer.valueOf(1);
        System.out.println(i3 == i4);
      
      
        // true
        Integer i5 = 1; // 自动装箱, 底层就是调用Integer.valueOf()
        Integer i6 = 1;
        System.out.println(i5 == i6);
      
        
      
        System.out.println("------------------");
      
        
        // false
        Integer i11 = new Integer(250);
        Integer i21 = new Integer(250);
        System.out.println(i11 == i21); // == 判断值是否相等
      
      
        // false: 超过了127
        Integer i31 = Integer.valueOf(250);
        Integer i41 = Integer.valueOf(250);
        System.out.println(i31 == i41);
      
      
        // false
        Integer i51 = 250;
        Integer i61 = 250;
        System.out.println(i51 == i61);
      
        public static Integer valueOf(int i) {
                if (i >= IntegerCache.low && i <= IntegerCache.high)
                    return IntegerCache.cache[i + (-IntegerCache.low)];
                return new Integer(i);
        }

你可能感兴趣的:(面试-java的享元模式)