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

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

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

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

分享给朋友:

相关文章

200+ 工具,这个网站堪称最强

200+ 工具,这个网站堪称最强

作为一个乱七八糟什么都懂一点的电脑小白,日常经常被别人增加些临时任务,比如PDF转Word,提取视频里的音频,图片加个边框。之前,电脑里安装了不少这类的软件,虽然能满足要求,但装的多了,总感觉电脑卡卡的。最近发现了一个超强的在线工具网站,首…

WordPress建设的网站为什么不推荐国内机房?

WordPress建设的网站为什么不推荐国内机房?

我劝大家不要用WordPress做国内网站,不要用国内机房的主机。原因如下:…

请问什么软件支持看电视直播?

请问什么软件支持看电视直播?

2024年9月6日最新更新:本文列举的 所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证你拿到的都是最新可用版本。…

到什么程度才叫精通 Linux?

我们医院有个大牛。 有一次,我的Linux电脑下载了Microsoft office 365 不能运行。于是买了2.5升装康师傅冰红茶找到大牛,让他帮忙解决。 大牛白了我一眼,让我把安装包发给他,只见他输入一个命令将安装包打开,整个屏幕都是…

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

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

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

发表评论

访客

看不清,换一张

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