zoukankan      html  css  js  c++  java
  • 自动拆装箱

    Integer a = 1;
    Integer b = 2;
    Long c = 3L;
    Integer d = 333;
    Integer e= 333;
    System.out..println(c==(a+b));//第一个
    System.out..println(c.equals(a+b));//第二个
    System.out..println(d==e);//第三个
    System.out..println(d.equals(e));//第四个
    ---------------分割线------------------------------
    答案是什么来着?隔把问题发出来有几个小时,又不确定了。也不知道想法对与不对。
    true
    false
    false
    true
    -----------------------------------------------
    第一个是a和b相加时,首先进行了拆箱,然后计算,计算完成后又自动装箱,最终是两个对象之间的直接比较,==直接比较两个对象引用的地址,这里是计算出来的值为3,且为long类型的值,是在Long 对象池中已经存在了,因此判断两种相等,即引用同一地址。调试发现实际上该计算等同于(long)3L==1+2。
    第二个,equals为值比较,由于这里计算的a+b自动装箱为Integer类型,Long的equals方法判断为非Long类型,返回为false,结果为不相等;
    第三个,超过128的整型包装类是不使用对象池,因此333存储地址不同,e和f引用不同地址,两者引用地址不相等;
    第四个,值判断,相等

  • 相关阅读:
    用户场景描述
    个人工作总结(第一阶段)
    个人进度报告
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
    2020寒假学习(14)
    2020寒假学习(13)
    2020寒假学习(12)
    2020寒假学习(11)
  • 原文地址:https://www.cnblogs.com/oldfish/p/3559977.html
Copyright © 2011-2022 走看看