java的享元模式
- java中的八大基本数据类型都有对应的包装类, 包装类的初始化操作有两种
new Integer()
Integer.valueOf()
- 在使用
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); }