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