码迷,mamicode.com
首页 > 其他好文 > 详细

Integer类几个主要方法学习

时间:2018-08-04 17:23:22      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:介绍   intvalue   虚拟机   环境   遇到的问题   缓存   eof   内容   span   

学习前我们先看一个笔者之前项目踩过的坑

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类常用方法比较简单,学习的时候关键是不要遗漏,理解到位,介绍就到这里

 

Integer类几个主要方法学习

标签:介绍   intvalue   虚拟机   环境   遇到的问题   缓存   eof   内容   span   

原文地址:https://www.cnblogs.com/yb38156/p/9392917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!