【Java】IntegerCache的妙用和陷阱
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的妙用和陷阱相关推荐
- IntegerCache的妙用和陷阱
转载自 IntegerCache的妙用和陷阱 考虑下面的小程序,你认为会输出为什么结果? public class Test {public static void main(String[] arg ...
- 框架开发之Java注解的妙用
框架开发之Java注解的妙用 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程 ...
- Java NIO编程的技巧和陷阱
去年做的分享,一直上传slideshare失败,今天又试了下,成功了.这个主题主要介绍Java NIO编程的技巧和陷阱,解读了一些NIO框架的源码,以及编写高性能NIO网络框架所需要注意的技巧和缺陷. ...
- Java构造时成员初始化的陷阱
今天看到一篇标题:"Java构造时成员初始化的陷阱"的文章:http://coolshell.cn/articles/1106.html 自已写了一个简单的程序测试了一下: pub ...
- scjp java程序员_Sun认证Java程序员SCJP考题常见陷阱
(1) Two public classes in the same file. (illegal) 同一个文件里有两个public类.(非法) (2) Main method calling a n ...
- 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明
原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...
- Java指令-Djava.ext.dirs的陷阱
Java指令-Djava.ext.dirs的陷阱 https://blog.csdn.net/cyony/article/details/74375251 这两天由于现场需求,需要把ES索引写入插件改 ...
- java assert语句未执行_Java陷阱之assert关键字
转自:http://lavasoft.blog.51cto.com/62575/43735/ Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java ...
- java 返回值给c_Java有陷阱,用时需谨慎——慎用入参做返回值
正常情况下,在Java中入参是不建议用做返回值的.除了造成代码不易理解.语义不清等问题外,可能还埋下了陷阱等你入坑. 问题背景 比如有这么一段代码:@Named public class AServi ...
最新文章
- hdu 4289 Control
- 王琦:5G新视频应用的机会窗口将在2-3年内
- matlab中方差直方图,如何规范直方图在MATLAB?
- 将time_t格式的字符串转换成具体的时间, 存放在SystemTime结构体中
- Java达到MySQL数据库备份(两)
- SSM框架之Spring MVC(二)常用注解说明
- linux 触屏设备 无法处理touchevent_一次通讯干扰处理
- coreseek 利用python作数据源建立索引
- 1. 通用基础算法(1.1枚举算法/1.2递推算法/1.3递归算法)
- number1(python)
- 2010齐鲁软件大赛题目(十一)虚拟化环境下的多媒体教室设计
- 洛谷 P1008三连击 C语言
- 使用mybatis进行四表联查
- 算法很美-位运算-找出落单的那个数
- 外星人系统下载Alienware X17R2系统dell原厂预装版 WIN11-21H2外星人原厂WIN11系统下载,附创建带F12 SupportAssist OS Recovery恢复功能教程
- TrustData 2015年Q3中国移动互联网与双十一移动电商数据报告
- 韩剧机器人题材的_来盘点一下2018年里面吸引人的十部韩剧
- 4月、5月、6月上旬总结下旬计划
- Unity2017中Timeline的简单使用方法
- 【毕业设计】基于Android系统的校园图书共享APP的设计实现
热门文章
- 华为的第一辆车来了,38.89万元起!王兴评论亮了
- 1月25日再次开抢!三星Galaxy S21系列标准版已多次开售即罄
- 坚决拥护苹果!三星Galaxy S21系列发布:多支笔,充电器耳机却没了
- 手机蓝绿厂终于转正了,已有“名分”!
- 滴滴医护专车新增南京 共上线6城覆盖1.8万医护
- 哈啰单车突发网络故障 网友上班迟到狂吐槽
- 微信/聊天宝/马桶MT/多闪 社交APP一个不落 被约谈!
- 常见的软件测试缺陷分类:遇到测试缺陷怎么处理?
- syslog-ng配置说明
- html 弹出一个邮件连接,mailto scheme 高级用法, 显示带html样式的邮件文本