Integer解读

在这里插入图片描述
在这里插入图片描述
涉及自动装箱和拆箱的过程。
源码:
在这里插入图片描述
1、使用自动装箱(Integer i = 1)方式创建Integer对象时,会使用valueOf进行Integer对象的初始化,此时,会调用IntegerCache.high,这是需要对IntegerCache这个静态内部类进行初始化。
2、IntegerCache类中有一个cache数组,在加载IntegerCache的时候,会将-128到127的Integer对象都创建了,并存到cache数组中,然后在判断当前初始化的Integer对象的值是否在-128到127之间,如果是,就直接从cache缓存中取,如果不存在,则new一个新的Integer对象。
3、之后再使用自动装箱的方式创建Integer对象时,值在-128到127之间时会直接从cache缓存中取。

使用自动装箱的方式创建的Integer对象,两者进行比较时,只要其值相等就是ture。而不在-128到127之间的,比较时会新new一个对象,而导致比较结果为false。
这个是Integer的缓存策略,用来节省内存和提高性能。整型对象在内部实现中通过使用相同的对象引用实现了缓存和重用。
注意:Integer的最低值是固定的,只能是-128,而最高值是可以通过jvm参数设置的。在执行java程序的时候加上-XX:AutoBoxCacheMax=参数即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Long的缓存机制(LongCache)与Integer的类似,还有Character(CharacterCache),Byte(ByteCache)的缓存机制也是类似。不过只有Integer的最大值可以通过jvm参数设置,其他的都固定的。其中,Byte,Short,Long 的范围: -128 到 127;Character, 范围是 0 到 127。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章