当前位置:首页 > 每日看点

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

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

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

分享给朋友:

相关文章

知乎创作收益高吗?

知乎创作收益高吗?

高啊,主要是大多数人不知道怎么做。(这是以前写的,请看到最后) 我之前就是傻傻写问答,文章,结果一毛钱收益没有。 知乎上收益高的主要有盐选,好物推荐,致知计划,付费咨询。1、盐选吧,是写故事,小说类的天堂,还有就是大咖们的地盘了,难度高。…

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

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

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

手机的运行内存真的有必要上16GB吗?

全是国产垃圾APP惯出来的。 那些对国产软件没意见的人,建议出国看看,花不了多少钱,出门开 Google Map,订宾馆用 Booking,翻译用 Google translate,聊天用 Telegram,社交活动用 Discord,你会…

打印速度慢,是不是打印机cpu不行?

打印速度慢,是不是打印机cpu不行?

打印机是机械设备,cpu内存硬盘它也有但这只是它的电控部分,打印机类似于汽车属于机电一体化设备和电脑不是一个类型的产品。 很多人总是认为打印机和电脑是一类产品,实际上这是一个误区,电脑是it(Information Technology)信…

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

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

大家都是怎么把自己的粉丝增加到1000的呢?

大家都是怎么把自己的粉丝增加到1000的呢?

截至2024年10月30日,关注者总数1137人,用时80天,增速约14人/天。 2024年8月10日开始创作,连续一周,1个关注者都没有。创作第7天,得到第一个关注,7天时间,写了8篇回答。当天得到关注,激动的心情历历在目。 没有一个…

发表评论

访客

看不清,换一张

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