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类常用方法比较简单,学习的时候关键是不要遗漏,理解到位,介绍就到这里
  • 相关阅读:
    二十八 .Django中模型类中Meta元对象了解
    【POJ2376】Cleaning Shifts
    【CF600E】Lomsat gelral
    【hiho1035】自驾旅行III
    【模板】manachar
    【hiho1065】全图传送
    【洛谷P1450】硬币购物
    【HDU2204】Eddy's爱好
    【CF208E】Blood Cousins
    【CF451E】Devu and Flowers
  • 原文地址:https://www.cnblogs.com/yb38156/p/9392917.html
Copyright © 2011-2022 走看看