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类常用方法比较简单,学习的时候关键是不要遗漏,理解到位,介绍就到这里
  • 相关阅读:
    poj 3096 Surprising Strings (set)
    hdu 4038 stone
    STL set 使用总结
    poj 3185 The Water Bowls (bfs 加未压缩)
    QPixmap显示图片
    addStretch的作用 .
    Qt SizeHint()
    StyleSheet
    linux编程守护进程编写
    Qt样式表的使用
  • 原文地址:https://www.cnblogs.com/yb38156/p/9392917.html
Copyright © 2011-2022 走看看