0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么Java中1000==1000为false,而100==100为true呢

数据分析与开发 来源:数据分析与开发 作者:codeceo 2020-11-19 15:51 次阅读

为什么 Java 中“1000==1000”为false,而”100==100“为true? 这是一个挺有意思的讨论话题。 如果你运行下面的代码:

Integera=1000,b=1000; System.out.println(a==b);//1 Integerc=100,d=100; System.out.println(c==d);//2

你会得到

false true

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

因此,后面一条语句也应该是false 。

这就是它有趣的地方了。

如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象

所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

Integerc=100;

的时候,它实际上在内部做的是:

Integeri=Integer.valueOf(100);

现在,如果我们去看valueOf()方法,我们可以看到

publicstaticIntegervalueOf(inti){ if(i>=IntegerCache.low&&i returnIntegerCache.cache[i+(-IntegerCache.low)]; returnnewInteger(i); }

如果值的范围在-128到127之间,它就从高速缓存返回实例。

所以…

Integerc=100,d=100;

指向了同一个对象。

这就是为什么我们写

System.out.println(c==d);

我们可以得到true。

现在你可能会问,为什么这里需要缓存?

合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

然而,通过反射API你会误用此功能。

运行下面的代码,享受它的魅力吧

publicstaticvoidmain(String[]args)throwsNoSuchFieldException,IllegalAccessException{ Classcache=Integer.class.getDeclaredClasses()[0];//1 FieldmyCache=cache.getDeclaredField("cache");//2 myCache.setAccessible(true);//3 Integer[]newCache=(Integer[])myCache.get(cache);//4 newCache[132]=newCache[133];//5 inta=2; intb=a+a; System.out.printf("%d+%d=%d",a,a,b);// }

责任编辑:xj

点赞和在看就是最大的支持

原文标题:为什么 Java 中“1000==1000”为false,而”100==100“为true?

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2952

    浏览量

    104496
  • C语言
    +关注

    关注

    180

    文章

    7596

    浏览量

    135942

原文标题:为什么 Java 中“1000==1000”为false,而”100==100“为true?

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【迅电子】龙芯LS2K1000LA和LS2K1000有何区别?

    【迅电子】龙芯LS2K1000LA和LS2K1000有何区别?
    的头像 发表于 11-13 14:13 68次阅读
    【迅<b class='flag-5'>为</b>电子】龙芯LS2K<b class='flag-5'>1000</b>LA和LS2K<b class='flag-5'>1000</b>有何区别?

    INA333 RG接100欧不是放大1000倍吗?怎么输出才2倍左右?

    RG接100欧不是放大1000倍吗?怎么输出才2倍左右?请问要放大1000倍如何接才正确?
    发表于 09-11 07:25

    为什么TLV9002的开环输出阻抗1200多,TLV9062的开环输出阻抗100

    为什么TLV9002的开环输出阻抗1200多? TLV9062的开环输出阻抗100? 数据差这么多有什么差异吗?会有什么影响吗?谢谢!
    发表于 08-14 06:07

    是否可以将默认configTICK_RATE_HZ 100Hz更改为1000Hz?

    我需要 1 毫秒的计时器精度,最好不使用硬件计时器。 是否可以将默认configTICK_RATE_HZ 100Hz 更改为 1000Hz?
    发表于 07-10 07:36

    配备铜缆和光纤接口的 DP83869HM 高抗扰性 10/100/1000以太网物理层收发器数据表

    电子发烧友网站提供《配备铜缆和光纤接口的 DP83869HM 高抗扰性 10/100/1000以太网物理层收发器数据表.pdf》资料免费下载
    发表于 06-27 09:45 0次下载
    配备铜缆和光纤接口的 DP83869HM 高抗扰性 10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太网物理层收发器数据表

    DP83867E/IS/CS稳健型高抗扰性小型10/100/1000以太网物理层收发器数据表

    电子发烧友网站提供《DP83867E/IS/CS稳健型高抗扰性小型10/100/1000以太网物理层收发器数据表.pdf》资料免费下载
    发表于 06-19 15:08 0次下载
    DP83867E/IS/CS稳健型高抗扰性小型10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太网物理层收发器数据表

    DP83867IR/CR稳健型高抗扰性10/100/1000以太网物理层收发器数据表

    电子发烧友网站提供《DP83867IR/CR稳健型高抗扰性10/100/1000以太网物理层收发器数据表.pdf》资料免费下载
    发表于 06-19 15:06 0次下载
    DP83867IR/CR稳健型高抗扰性10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太网物理层收发器数据表

    智嵌物联100/1000BASE-T1千兆车载以太网交换机

    ZQWL-AES6502是智嵌物联自主研发生产的一款2+5端口千兆车载以太网(100/1000BASE-T1)交换机。具有2个RJ45千兆网口(100BASE-Tx/1000BASE-
    的头像 发表于 06-06 09:29 983次阅读
    智嵌物联<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>BASE-T1千兆车载以太网交换机

    1000兆网线和100兆网线压线区别大吗

    1000兆网线和100兆网线在压线方面存在一些差异,但具体差异大小取决于网线的类型和制作工艺。 首先,1000兆网线通常采用的是六类网线或超五类网线,
    的头像 发表于 04-02 10:22 520次阅读

    康谋产品 | 用于100/1000BASE-T1网络的车载以太网开发工具

    1000可将100/1000BASE-T1信号转换为100BASE-TX/1000BASE-T以太网。 一、NETLion
    的头像 发表于 01-23 17:32 331次阅读
    康谋产品 | 用于<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>BASE-T1网络的车载以太网开发工具

    使用ADAS1000遇到的问题求解答

    以波形的形式显示,与模拟器发出来的波形相对比,明显不同。模拟器发出的波形的QRS是向上的波形,0x11数据波形QRS波形是向下的波形。 4、AC leadoff检测不到导联脱落,呼吸阻抗检测幅值
    发表于 12-20 08:14

    用STM32和ADAS1000通信,在初始化配置的时候需要把ADAS1000配置从模式吗?

    我用STM32和ADAS1000通信,请问我在初始化配置的时候需要把ADAS1000配置从模式吗?
    发表于 12-20 06:03

    为什么1000base-T1在mdi上传输频率750MHz

    车载以太网在数据发送过程的编码,4b-3b-2t-pam3。其中在3b-2t的时候,导致频率降为原来的2/3,所以100base-T1的mdi传输频率66.7MHz;对于1000b
    发表于 12-13 11:24

    ad7124-8配置激励电流1000微安,但是实际输出只有880微安怎么解决?

    在IO_Control1寄存器配置冷端的激励电流1000微安,但是用示波器测量只有880微安; 当这个电流流过2K的电阻时产生的电压达不到预期的2000Mv, 请问这个问题怎么解决? 如果在软件
    发表于 12-11 08:02

    2K1000核心板在能源管理系统产品方案

    2K1000核心板在能源管理系统产品方案
    的头像 发表于 11-17 14:15 473次阅读
    迅<b class='flag-5'>为</b>2K<b class='flag-5'>1000</b>核心板在能源管理系统产品方案