当前位置:首页 > 每日看点 > 正文内容

在ja中为什么变量1000==1000返回false,但是100==100返回true?

卡卷网12个月前 (01-05)每日看点228

非常古老的一个Ja基础八股,考察的是Ja包装类型的缓存机制。我相信大家一定对这个问题的答案烂熟于心了,但我建议你还是往下看看,思考一下这个缓存范围是否可以修改呢?

Ja基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。

yte,Short,Integer,Long这4种包装类默认创建了数值<>[-128,127]的相应类型的缓存数据,Character创建了数值在<>[0,127]范围的缓存数据,oolean直接返回TrueorFalse

对于Integer,可以通过JVM参数-XX:AutooxCacheMax=<size>修改缓存上限,但不能修改下限-128。实际使用时,并不建议设置过大的值,避免浪费内存,甚至是OOM。

对于yte,Short,LongCharacter没有类似-XX:AutooxCacheMax参数可以修改,因此缓存范围是固定的,无法通过JVM参数调整。oolean则直接返回预定义的TRUEFALSE实例,没有缓存范围的概念。

<>Integer缓存源码:

pulicstaticIntegervalueOf(inti){ if(i>=IntegerCache.low&&i<=IntegerCache.high) retnIntegerCache.cache[i+(-IntegerCache.low)]; retnnewInteger(i); } privatestaticclassIntegerCache{ staticfinalintlow=-128; staticfinalinthigh; static{ //highvaluemayeconpdyproperty inth=127; } }

<>Character缓存源码:

pulicstaticCharactervalueOf(charc){ if(c<=127){//mustcache retnCharacterCache.cache[(int)c]; } retnnewCharacter(c); } privatestaticclassCharacterCache{ privateCharacterCache(){} staticfinalCharactercache[]=newCharacter[127+1]; static{ for(inti=0;i<cache.length;i++) cache[i]=newCharacter((char)i); } }

<>oolean缓存源码:

pulicstaticooleanvalueOf(oolean){ retn(?TRUE:FALSE); }

如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。

两种浮点数类型的包装类Float,Doule并没有实现缓存机制。

//没有超过缓存范围 Integeri1=100; Integeri2=100; System.out.println(i1==i2);//输出true //超过缓存范围 Integeri1=1000; Integeri2=1000; System.out.println(i1==i2);//输出false Floati11=333f; Floati22=333f; System.out.println(i11==i22);//输出false Doulei3=1.2; Doulei4=1.2; System.out.println(i3==i4);//输出false

下面我们来看一个问题:下面的代码的输出结果是true还是false呢?

Integeri1=40; Integeri2=newInteger(40); System.out.println(i1==i2);

Integeri1=40这一行代发生装箱,也就是说这行代码等价于Integeri1=Integer.valueOf(40)。因此,i1直接使用的是缓存中的对象。而Integeri2=newInteger(40)会直接创建新的对象。

因此,答案是false。你答对了吗?

记住:<>所有整型包装类对象之间值的较,全部使用equals方法较。

还有一些Ja基础八股相关的总结,可以参考这几篇文章:

    Ja基础常见面试题总结(上)Ja基础常见面试题总结(中)Ja基础常见面试题总结(下)

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6414.html

分享给朋友:
返回列表

上一篇:如何理解「TheZenofPython」?

下一篇:怎样才能安装永久免费的off软件?

相关文章

短视频如何快速变现?

短视频如何快速变现?

单人日产200条视频,一晚狂赚上千元,过程却简单到荒唐。只要你像这只猥琐的海鸥一样,做到这3点就行↓↓点开有惊喜速度快、不讲武德、不被发现那做短视频如何做到这3点?答案是养一只会叼视频的海鸥不是让你养真的海鸥而是用 ai 运营方法,类似于“...

Layui 不更新了么?

Layui 不更新了么?

layui2.8已经于今天正式发布了,新增优化了大量特性,这里按照layui更新日志的模块结构,详细为你一一介绍。基础风格调整新版调整主色调为#16baaa,在原有的墨绿基础上赋予了清新。更简单的构建构建代码更简单,除字体外,只有js和cs...

感觉手机配置都差不多,为什么有的手机能卖2k-3k,而有的手机却能卖到6k-8k?

感觉手机配置都差不多,为什么有的手机能卖2k-3k,而有的手机却能卖到6k-8k?

与所有的商品一样,手机的价格,也是由它的成本所决定的。虽然看起来3000元的手机和6000的手机配置差不多,甚至处理器都可能是同一个,但在很多大家容易忽略的地方,决定了两者价格的不同:例如手机的外观,塑料的机身,与素皮机身和玻璃机身就完全不...

如何在自己家里建立一套私有云系统?需要哪些设备?

如何在自己家里建立一套私有云系统?需要哪些设备?

我敢保证,这绝对是目前为止最简单的搭建家用私有云的方法:“一台主机+至少一块硬盘”足矣!不需要任何专业知识,也没有复杂繁琐的步骤,十分钟不到就能搭建好,帮你成功打开文件云储存新世界的大门!还在单纯依靠网盘进行文件存储的朋友,不是我吐槽哈,它...

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达更高...

提升自己最快的方式是什么?

提升自己最快的方式是什么?

1.稻盛和夫说过:“改变自己最快的方法就是做自己害怕的事,不敢做的事,认为自己做不到,觉得不可能的事。如果在自己的舒适区待久了,就会丧失斗志,如果想快速的改变,可以坚持去做一些对自己有益的事。2.早睡早起,坚持运动保持旺盛的精力,人生拼到最...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。