在ja中为什么变量1000==1000返回false,但是100==100返回true?
非常古老的一个Ja基础八股,考察的是Ja包装类型的缓存机制。我相信大家一定对这个问题的答案烂熟于心了,但我建议你还是往下看看,思考一下这个缓存范围是否可以修改呢?
Ja基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。
yte,Short,Integer,Long这4种包装类默认创建了数值<>[-128,127]>的相应类型的缓存数据,Character创建了数值在<>[0,127]>范围的缓存数据,oolean直接返回TrueorFalse。
对于Integer,可以通过JVM参数-XX:AutooxCacheMax=<size>修改缓存上限,但不能修改下限-128。实际使用时,并不建议设置过大的值,避免浪费内存,甚至是OOM。
对于yte,Short,Long、Character没有类似-XX:AutooxCacheMax参数可以修改,因此缓存范围是固定的,无法通过JVM参数调整。oolean则直接返回预定义的TRUE和FALSE实例,没有缓存范围的概念。
<>Integer缓存源码:>
<>Character缓存源码:>





