Java基础拾遗(一) — 忽略的 Integer 类
2024-08-28 07:48:49
学习前我们先看一个笔者之前项目踩过的坑
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
System.out.println(a==b);//true
Integer c = 128;
Integer d = 128;
System.out.println(c==d); //false
}
看到这个结果,有些人可能比较惊讶,我也很惊讶,还中过大招,这都是源码看的不仔细的结果
还是直接上截图:
这是Integer类的源码片段,翻译一下注释:该内部静态类在虚拟机初始化时会设置并保存IntegerCache.high值,默认是127
然后会将-128~127的值缓存下来作为自动装箱时使用(而无需再new出新的Integer对象),笔者当时遇到的问题是:比较两个
Integer的值时因为以前的习惯总是比较int值用==,想着int和Integer会自动拆装箱,所以也会比较值而非对象地址,更要命的是
本地测试的id值一般都不会超过100,结果用==操作符结果总为true,而生产环境的id值是1000+,自然判断为false
接下来再看Integer.valueOf()方法:上源码不用解释,再次遇到IntegerCache
接下来再看Integer类重写的equals方法,可以看到重写后equals比较的对象的内容,也就是比较值大小
接下来看另外一些方法:如果不想用equals方法比较值大小,也可以用intValue()方法作比较
Integer类常用方法比较简单,学习的时候关键是不要遗漏,理解到位,介绍就到这里
最新文章
- Python学习笔记(四)——编码和字符串
- Web前端之CSS_day3-4
- Java基础 —— HTML
- 小学生之深入C#
- asp.net 读取Excel文档
- python中mcmc方法的实现
- WPF中使用USERCONTROL
- 【FAQ系列】:DB服务器产生大量物理读问题优化思路
- C语言数据结构基础学习笔记——树
- win10个人助理conrtana软件能否支持用户反馈、后续优化
- ELMO模型(Deep contextualized word representation)
- .net中 登录 才能下载文件的方法 Response.WriteFile实现下载
- 【bzoj2007】 Noi2010—海拔
- 1100C	NN and the Optical Illusion
- 第二章 向量(a)接口与实现
- python学习 day16 (3月21日)----(正则)
- 微信小程序 this.data与this.setData
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
- poj 1825 Ants 水题
- hihocoder[Offer收割]编程练习赛19 D 相交的铁路线(树上路径交)