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

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

卡卷网1年前 (2025-01-05)每日看点247

非常古老的一个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软件?

相关文章

逾期后支付宝微信被冻结,显示执保该怎么办?

这几天有朋友问我说,他的微信零钱突然的用不了,问我是不是被冻结了,问我该怎么办?是不是被起诉了?这个,那个,别慌,别慌,还是那句老话:有钱就去协商,没钱只能暂时不管!但是真不管,这个被冻结的微信怎么办呢?今天针对这个问题,我就给大家做一哥比...

现在做抖音的话,还有机会嘛?

现在做抖音的话,还有机会嘛?

之前我问过小杨哥一个问题:“现在抖音还好做吗?”疯狂小杨哥在抖音已经突破1亿粉丝,直播间10w的在线观看人数,日常带货随便一场也是上7位数的数据。现在抖音的市场好像已经被头部占领,资源靠前,普通人似乎已经没有机会了?下面是小杨哥对于做抖音的...

有哪些好用不火的软件?

有哪些好用不火的软件?

20个无敌冷门的小众APP,好用到内存爆了都不想卸载,个个是宝藏!特别是第4、13、19个,大多数人都没玩过~喜欢可以双击屏幕取走哦~1、【毒汤日历 】 – 你的每日快乐源泉[iPhone/Android]好用指数:⭐⭐⭐⭐⭐下载地址:各...

有没有推荐什么手游搬砖,或者是用手机就能做的工作能日入100左右就好了?

有没有推荐什么手游搬砖,或者是用手机就能做的工作能日入100左右就好了?

大家好,我是思聪。思聪游戏搬砖社每天分享真实靠谱的游戏赚钱的方法。整个游戏的攻略用一句话概括就是:打元宝兑换平台物品,xx元宝兑换一个分红物品。你把你打游戏得来的元宝去兑换平台的分红物品,就能每天领取xx元的分红。(具体看是哪个分红物品,比...

计算机专业不干互联网不热爱技术,还能转行干什么?

转行的思路,无非也就是那几个。我们顺着每个思路,一路捋一遍,基本上,大致可行的方向,也就有了。一、跟对口职业和岗位业务链条相邻的职业和岗位计算机专业如果找到了对口的技术岗位,跟技术工作联系最紧密的岗位是什么?产品经理。当然,大多数产品经理也...

如何判断 Java 工程师的基础知识是否扎实?

我来给你出几道大题,能答对70%,你就算基础扎实了。第一部分 Java基础(27)1. 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司何职?2. 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法3. 引用类型:同...

发表评论

访客

看不清,换一张

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