zoukankan      html  css  js  c++  java
  • Java基础拾遗(一) — 忽略的 Integer 类

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

    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爬虫】第五课(b站弹幕)
    【Python爬虫】第四课(查询照片拍摄地址)
    一些tips
    【Python爬虫】第三课(提取数据)
    【Python爬虫】第二课(请求头设置)
    【Python爬虫】第一课
    【数据分析】如何进行数据分析
    【数据分析】派单排序策略优化验证(附sql查询代码)
    python基础01
    消息
  • 原文地址:https://www.cnblogs.com/yb38156/p/9392917.html
Copyright © 2011-2022 走看看