为什么Integer a=100,b=100时候a==b返回true,而Integer c=1000,d=1000时候c==d返回false 
Integer i =100实际在内部做了
Integer i = Integer.valueOf(100)的操作。
来看Integer.class源码
这个方法的首先断言了IntegerCache.high的值大于等于127(关于这里assert 大于等于127解释请看补充),否则退出方法。
接着if条件内i需要在low值和high值之间。
可以看到low为-128,即if条件需要i在-128和127之间,那么返回i+128作为整型数组 cache的下标,用来放在缓存中。这样也就是说任意一个相同数值的Integer的数,如果在-128和127之间,那么它们之间的内存地址是相同的。
这也就解释了为什么Integer a=100,b=100时候a==b返回true。
而如果if条件不满足则返回new Integer(i)。
此时不放入缓存,也就是说不在-128和127范围内的数它们的内存地址是不相同的,这也就解释了为什么Integer c=1000,d=1000时候c==d返回false。
补充:
补充说明assert断言IntegerCache.high的值大于等于127才执行该方法。
看源码
可以看到high本身没有值,是h=127赋给它的,而h的值在这之前可能会改变。也就是说缓存上限的127其实是可以改变,可以从VM这个java.lang.Integer.IntegerCache.high中读取为上限,但是需要满足这个上限的值确实在-128和127之间。也就是说缓存的容量其实是可以改变的。基于这个特点,如果缓存的容量在-128到127之间,那么我们为了使用内存数据的高效性,可以将范围内大小的Integer放在同一缓存数组中,而不在范围内的则不放在缓存数组中,这也就是为什么下面的ValueOf方法中需要断言assert high值>=127的原因。

为什么Integer a=100,b=100时候a==b返回true,而Integer c=1000,d=1000时候c==d返回false相关推荐

  1. 屋子里有1到100号100盏关闭的灯

    屋子里有1到100号100盏关闭的灯,门外有1到100号100个人,每个人都要进屋一次,把与自己序号对应的和是自己序号倍数的灯绳拉一下,(比如1号要拉所有的灯绳,2号要拉2,4,6的灯绳,而100号只 ...

  2. 图书音像全场满100返100

    图书音像全场满100返100 京东商城新闻 - 图书音像全场满100返100 图书音像全场满100返100 注意这个是满返不是满减,差点中招 posted on 2012-04-13 14:22 le ...

  3. 比较99^100与100^99大小

    比较99100与10099大小 问题点 99100是100个99的积:99^{100} 是100个99的积:99100是100个99的积: 10099是99个100的积:100^{99}是99个100 ...

  4. 计算100个1+100个2+100个3+...+100个100

    public static void main(String[] args) {//求100个1+100个2+100个3+...100个100的和int sum=0;int n=100;for(int ...

  5. java integer 包_java之学习基本类型包装类的概述及Integer类的概述和构造方法

    基本类型包装类的概述 A:为什么会有基本类型包装类 * 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据. * B:常用操作 * 常用的操作之一:用于基本数据类型与字符串之间 ...

  6. 洗牌-牛客 第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000

    题目描述: 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上 ...

  7. java 100万 100 最大 选出_面试真题:求100万内的质数

    一个头发稀少.穿着格子衬衣的中年男子走了进来,把手里拿的MAC放在桌子上,对我说:"我会用电脑记录面试过程,你不要介意啊". 我回答到:"没关系." 面试官:& ...

  8. python必背100代码-100行Python代码实现一款高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为 Textshot 的截图工具,刚开源不到半个月已经500+Star. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本 ...

  9. python必背100源代码-100行Python代码实现一款高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为Textshot的截图工具,刚开源不到半个月已经500+Star. 这两天抽空看了一下Textshot的源码,的确是一个值得介绍的项目. 相对于大多 ...

最新文章

  1. 介绍一篇通过无监督depth estimation改进语义分割的论文
  2. MAP 最大后验——利用经验数据获得对未观测量的点态估计
  3. jee websocket搭建总结
  4. UPS 异常停机案例分析
  5. 一种抑制undershoot/overshoot锐化算法介绍
  6. 05Prism WPF 入门实战 - Navigation
  7. python爬取网易云音乐问题陈述_python 网易云音乐 评论爬取问题
  8. linux常用命令大全(转)好东西要分享
  9. Tomcat免安装版的环境变量配置以及Eclipse下的Tomcat配置和测试
  10. 移动web app开发必备 - zepto事件问题
  11. 物联网哪个市场有可能诞生新一轮BAT?
  12. 16muduo_base库源码分析(七)
  13. java 配置dbcp_java – 使用DBCP进行Tomcat配置
  14. 富斯FS_I6六通道遥控器玩转APM飞控失控保护
  15. 戴尔云客户端:三大发力点实现高速增长
  16. asp.net知识共享平台
  17. opencv背景抠图
  18. 脑机接口专栏 | 如何分析静息状态的fMRI数据?(二)
  19. 计算机组成大题分析(五)
  20. C/C++开3次方函数cbrt

热门文章

  1. 亿万富翁神奇公式:年存1.4万四十年变1亿
  2. ug908 Programming and Debugging
  3. 基于OCC与OSG的CAD平台构建值gmsh划分效果测试
  4. Android SDK 的 H5 打通方案演进 | 数据采集
  5. 全方位解读企业微信和个人微信的区别
  6. excel表格分割线一分为二_PDF转Excel的Python代码
  7. linux自动获取ipv6,IPv6系列-详解自动分配IPv6地址
  8. 德州扑克 java 算法_德州扑克算法幕后研发者:AI如何打败顶级人类牌手?
  9. STC8G1K08上电复位时,P30,P31,P32同时为0,程序不能启动。
  10. 微凉的风吹着我凌乱的头发,突然决定开个客博,以录下从MATLAB到OMNET的艰难历程