1.概述

转载:https://mp.weixin.qq.com/s/PnVkrMzYeOiepPKjl4MKVA

考虑下面的小程序,你认为会输出为什么结果?

public class Test {public static void main(String[] args) {Integer n1 = 123;Integer n2 = 123;Integer n3 = 128;Integer n4 = 128;System.out.println(n1 == n2);System.out.println(n3 == n4);}}

答案如下,请选择刮开:

true
false

是否和你预想的一致?

我们知道==比较的是对象的引用,那这里为什么会这出这种情况呢?

2. 原理

首先这是JDK在1.5版本中添加的一项新特性,把-128~127的数字缓存起来了,用于提升性能和节省内存。所以这个范围内的自动装箱(相当于调用valueOf(int i)方法)的数字都会从缓存中获取,返回同一个数字,所以现在你理解为什么了吧。同时这也会给我们开发带来预想不到的陷阱,直得注意!!

而我们通过new Integer(1)这样就不会从缓存中获取,大家可以自行测试。

我们来翻看下jdk中Integer的源码

上面是IntegerCache的源码,把从-128~high放在缓存中

上面是valueOf的源码,先从缓存中获取,获取不到再new一个返回

从源码里面我们可以看到最小边界是-128,最大边界可以通过-XX:AutoBoxCacheMax进行配置,但也不会大于Integer.MAX_VALUE最大值。

扩展

这种缓存行为不仅用于Integer类,而且还用于Long,Short,Byte,Character,大家可以去这些类里面查看XxxCache的类和valueOf方法源码,原理大致相同,但它们的边界略有一二,也不能进行最大边界的配置。

【Java】IntegerCache的妙用和陷阱相关推荐

  1. IntegerCache的妙用和陷阱

    转载自 IntegerCache的妙用和陷阱 考虑下面的小程序,你认为会输出为什么结果? public class Test {public static void main(String[] arg ...

  2. 框架开发之Java注解的妙用

    框架开发之Java注解的妙用 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程 ...

  3. Java NIO编程的技巧和陷阱

    去年做的分享,一直上传slideshare失败,今天又试了下,成功了.这个主题主要介绍Java NIO编程的技巧和陷阱,解读了一些NIO框架的源码,以及编写高性能NIO网络框架所需要注意的技巧和缺陷. ...

  4. Java构造时成员初始化的陷阱

    今天看到一篇标题:"Java构造时成员初始化的陷阱"的文章:http://coolshell.cn/articles/1106.html 自已写了一个简单的程序测试了一下: pub ...

  5. scjp java程序员_Sun认证Java程序员SCJP考题常见陷阱

    (1) Two public classes in the same file. (illegal) 同一个文件里有两个public类.(非法) (2) Main method calling a n ...

  6. 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明

    原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...

  7. Java指令-Djava.ext.dirs的陷阱

    Java指令-Djava.ext.dirs的陷阱 https://blog.csdn.net/cyony/article/details/74375251 这两天由于现场需求,需要把ES索引写入插件改 ...

  8. java assert语句未执行_Java陷阱之assert关键字

    转自:http://lavasoft.blog.51cto.com/62575/43735/ Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java ...

  9. java 返回值给c_Java有陷阱,用时需谨慎——慎用入参做返回值

    正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码:@Named public class AServi ...

最新文章

  1. hdu 4289 Control
  2. 王琦:5G新视频应用的机会窗口将在2-3年内
  3. matlab中方差直方图,如何规范直方图在MATLAB?
  4. 将time_t格式的字符串转换成具体的时间, 存放在SystemTime结构体中
  5. Java达到MySQL数据库备份(两)
  6. SSM框架之Spring MVC(二)常用注解说明
  7. linux 触屏设备 无法处理touchevent_一次通讯干扰处理
  8. coreseek 利用python作数据源建立索引
  9. 1. 通用基础算法(1.1枚举算法/1.2递推算法/1.3递归算法)
  10. number1(python)
  11. 2010齐鲁软件大赛题目(十一)虚拟化环境下的多媒体教室设计
  12. 洛谷 P1008三连击 C语言
  13. 使用mybatis进行四表联查
  14. 算法很美-位运算-找出落单的那个数
  15. 外星人系统下载Alienware X17R2系统dell原厂预装版 WIN11-21H2外星人原厂WIN11系统下载,附创建带F12 SupportAssist OS Recovery恢复功能教程
  16. TrustData 2015年Q3中国移动互联网与双十一移动电商数据报告
  17. 韩剧机器人题材的_来盘点一下2018年里面吸引人的十部韩剧
  18. 4月、5月、6月上旬总结下旬计划
  19. Unity2017中Timeline的简单使用方法
  20. 【毕业设计】基于Android系统的校园图书共享APP的设计实现

热门文章

  1. 华为的第一辆车来了,38.89万元起!王兴评论亮了
  2. 1月25日再次开抢!三星Galaxy S21系列标准版已多次开售即罄
  3. 坚决拥护苹果!三星Galaxy S21系列发布:多支笔,充电器耳机却没了
  4. 手机蓝绿厂终于转正了,已有“名分”!
  5. 滴滴医护专车新增南京 共上线6城覆盖1.8万医护
  6. 哈啰单车突发网络故障 网友上班迟到狂吐槽
  7. 微信/聊天宝/马桶MT/多闪 社交APP一个不落 被约谈!
  8. 常见的软件测试缺陷分类:遇到测试缺陷怎么处理?
  9. syslog-ng配置说明
  10. html 弹出一个邮件连接,mailto scheme 高级用法, 显示带html样式的邮件文本