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

    文章

    2967

    浏览量

    104750
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136817

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

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

收藏 人收藏

    评论

    相关推荐

    74ALVC164245是否能支持速率100Mbps的信号转换

    请帮忙确认74ALVC164245是否能支持速率100Mbps的信号转换,Datasheet上并没有找到明确的描述,谢谢!
    发表于 12-11 06:51

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

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

    【北京迅】itop-龙芯2k1000开发指南Linux基础入门vim 编辑器

    【北京迅】itop-龙芯2k1000开发指南Linux基础入门vim 编辑器
    的头像 发表于 10-25 14:56 307次阅读
    【北京迅<b class='flag-5'>为</b>】itop-龙芯2k<b class='flag-5'>1000</b>开发指南Linux基础入门vim 编辑器

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

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

    使用LM358对模拟信号进行放大,电源输出100mA时对VCC进行两级放大,信号非常紊乱,为什么?

    在使用LM358对模拟信号进行放大时发现(放大倍数1000倍左右),电源的输出100mA时(远大于负载电流)对VCC进行两级放大,信号非常紊乱。且出现电源输出越大,信号越平稳。下
    发表于 08-30 07:56

    为什么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>以太网物理层收发器数据表

    压摆率1000V/μs的低噪声全差分放大器SC7515

    压摆率1000V/μs的低噪声全差分放大器SC7515
    的头像 发表于 06-26 09:39 367次阅读
    压摆率<b class='flag-5'>为</b><b class='flag-5'>1000</b>V/μs的低噪声全差分放大器SC7515

    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>以太网物理层收发器数据表

    温度传感器PT1000工作原理是什么

    PT1000定义 PT1000是一种铂电阻温度传感器,其电阻值随温度的变化变化。PT是Platinum的缩写,1000表示在0℃时,其电阻值
    的头像 发表于 06-19 14:14 4988次阅读

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

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

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

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

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

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