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

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

卡卷网11个月前 (01-05)每日看点225

非常古老的一个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.“如果我被强奸了,有人说我会失去贞操。”“我怎么失去贞操了呢?” “我的贞操不在我的阴道里。”“失去贞操的是强奸犯,而不是被强奸的人。”2.但要记得那年海边的烟火,我们不拘一格 ,嘲笑过生活。………网易云热评《这样就很好》3.“ 我们在...

为什么大家都说手机性能永远超不过PC?

最新的天玑9400牛逼吧,堪称PC级CPU,测试成绩16W功耗能跑9500分,1.8W能跑3000分,GPU也差不多是这个情况。手机电池一般是4000-5000毫安时,电压3.7V。也就是说,手机正常满载5W功耗下,这个电池能支持运行4个小...

拼多多百亿补贴买手机电脑等数码产品靠谱吗?

大家很多人都在问pdd百亿补贴购机靠谱吗?首先声明一下,我不是pdd的人,我只是一个普普通通混迹从事pc行业的数码玩家,我只是在评论区看到很多人都在无脑推百亿补贴,特地发一条怗子来说明一下这个东西。此怡不存在偏向引导,此站仅站在我个人角度上...

华为纯血鸿蒙,从此天下三分了吗?

华为纯血鸿蒙,从此天下三分了吗?

万众期待的纯血版 HarmonyOS NEXT 终于是端上来了,主打一个自研,从里到外,从内核到架构,都是自研。用户的激情已经被点燃,可见大家对于纯血鸿蒙的期待,但是鸿蒙系统能不能真正与安卓、iOS三分天下呢?目前来说,还为时过早。iOS和...

抖音有3,4万粉丝能挣多少钱?

抖音有3,4万粉丝能挣多少钱?

如果在抖音有100万粉丝,一个月能赚多少钱你知道吗?直接说答案:抖音有100万粉丝,可能1分钱也赚不到...那视频有100万点赞,能赚多少钱?可能也是1分钱都赚不到...新手需要通过抖音变现抖音运营速报站:做为新手玩抖音要注意什么?怎样才能...

SWITCH销量会破亿吗?

SWITCH销量会破亿吗?

不可能破亿的。能过5000万就了不起了。我觉得是过不了5000万这条线的,要是过了的话,每过100万我在这个回答里更新一个任天堂游戏人物的画像。愿赌服输。5100万突破的马里奥5200万突破的碧琪公主财报更新了,目前5577万。5300万突...

发表评论

访客

看不清,换一张

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