int是原始数据类型,Integer是对应的包装类,存储了对应的int数据,并且有自动拆装箱功能
可以根据上下文进行自动的转换
int还有着一个默认缓存
设置默认缓存-128到127的int值,对于缓存的大小可以调整对应的缓存上限值,-XX:AutoBoxCacheMax=N
类似的考法有:
Java的自动拆装箱阶段
静态工厂的valueof可以触发缓存机制吗
原始类型和拆装箱类型的性能区别呢?
常见的缓存池范围有
Boolean true/false
Short -128到127
Byte 同上
Character 缓存 \u0000到 \u007F
但是由于包装类型是一个引用类型
带有着对应的对象头,所以建议避免无意中的拆箱和装箱行为,尤其是性能比较敏感的时候
对于原始数据类型,其实也并不是线程安全
尤其是对应32位的机器上的大数据类型,可能出现只更新了一半的数据位的情况
Java对于原始数据类型,是有着一些缺陷的.
原始数据类型并不能和Java泛型进行配合使用
因为Java的泛型是一种伪泛型,所以必须要保泛型中的数据类型是Object的子类