包装类型
——学习记录
值得关注的是各个包装类的缓存大小:
Boolean:使用静态 final 变量定义,valueOf()就是返回这两个静态值
Byte:范围 -128~127,全部缓存
Short:范围 -32768 ~ 32767,缓存范围是 -128~127
Character:范围 0~65535,缓存范围是0~127
Long:范围 [-263, 263-1],缓存范围是-128~127
Integer:范围 [-231, 231-1],缓存范围是-128~127,但是由于是应用最广的数据类型,所以缓存的最大值是可以改变的。👇
关于 Integer 相关的源码:
这段源码含义是放回缓存范围内的对象。
通过源码可以知道最小值固定为 -128,最大值并不是固定值,缓存的最大值可以通过虚拟机参数 -XX:AutoBoxCacheMax= n
来设置的,为空未指定的会则为 127。
在阿里开发手册中,关于包装对象之间值的比较问题有这样的规约
在缓存内的包装对象可以用==
比较,因为缓存内的对象是复用的。但是超出缓存==
比较就不行了,因为之后的对象都是新创建出来的,这时候就得用equals比较内容。综上难免会有
——关于equals和==的区别可以参考 【equals 与 == 的区别】
-
为什么会缓存这一段区间的数值?
因为这样可以减少内存的占用,提高程序运行的效率,将常用的对象提前缓存起来,需要时直接从缓存中提取即可。
-
缓存的区间可以修改吗?
可以修改,但是也就只有 Integer 可以修改缓存范围。
天天学习进步