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引用不同地址,两者引用地址不相等;
    第四个,值判断,相等

  • 相关阅读:
    Create procedure
    json
    XSLT
    使用 ActiveMQ 示例
    使用Apache FtpServer搭建FTP服务器
    Publisher/Subscriber(发布/订阅者)消息模式开发流程
    使用 ActiveMQ 示例
    内嵌jetty
    基于Atom协议的数据接入规范
    C++创建jni 并且利用rundll32.exe调试jni程序
  • 原文地址:https://www.cnblogs.com/oldfish/p/3559977.html
Copyright © 2011-2022 走看看