总结
规律:
- 通过自动装箱Integer i = 1 / Character c = 'p'、或者显示调用valueOf() ,如果在缓存中,就返回同一个对象
- 如果不在,就new一个新对象返回
1.Integer.valueOf缓存范围是[-128,127]
- 通过integer内部的private static class IntegerCache类的Integer cache[]来缓存
- 缓存的最小值,不能改变,只能是-128
- 缓存的最大值,可以通过-XX:AutoBoxCacheMax=<size>来改变。且只有大于127时,改变才有效;配置小于127无效。
2.Byte,Short,Long类型的缓存范围是[-128,127]
- 每个包装类都有各自的缓存类ByteCache, ShortCache, LongCache
- 缓存的上下限,不能改变
3.Character缓存[0,127]
- 缓存类是CharacterCache
- 缓存的上下限,不能改变
4.Double没有缓存,Double.valueOf()都是直接返回new Double (num);
5. Boolean缓存TRUE、FALSE, 并没有缓存类。