• s == t 何解?


    Integer s=new Integer(9);
    Integer t=new Integer(9);
    Long u=new Long(9);
     
     
    (s==t) 这个是错的,只要有new这个关键字,就是开辟空间,用的是引用


    Integer s =9;
    Integer t =9;
    (s==t) 这个是对的,在【-128,127】有缓存,指向同一个引用


    • int和int之间,用==比较,肯定为true。基本数据类型没有equals方法
    • int和Integer比较,Integer会自动拆箱,== 和 equals都肯定为true
    • int和new Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为true
    • Integer和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在[-128,127]中的时候,由于值缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是直接从缓存中获取已经创建好的Integer对象。而当大于这个区间的时候,会直接new Integer。
      当Integer和Integer进行==比较的时候,在[-128,127]区间的时候,为true。不在这个区间,则为false
      当Integer和Integer进行equals比较的时候,由于Integer的equals方法进行了重写,比较的是内容,所以为true

    • Integer和new Integer : new Integer会创建对象,存储在堆中。而Integer在[-128,127]中,从缓存中取,否则会new Integer.
      所以 Integer和new Integer 进行==比较的话,肯定为false ; Integer和new Integer 进行equals比较的话,肯定为true

    • new Integer和new Integer进行==比较的时候,肯定为false ; 进行equals比较的时候,肯定为true
      原因是new的时候,会在堆中创建对象,分配的地址不同,==比较的是内存地址,所以肯定不同

    • 装箱过程是通过调用包装器的valueOf方法实现的
      拆箱过程是通过调用包装器的xxxValue方法实现的(xxx表示对应的基本数据类型)

    • 总结:Byte、Short、Integer、Long这几个类的valueOf方法实现类似的。所以在[-128,127]区间内,==比较的时候,值总是相等的(指向的是同一对象),在这个区间外是不等的。
      而Float和Double则不相等, Boolean的值总是相等的

  • 相关阅读:
    小组互评以及自评
    构建之法的第十、十一、十二章读书笔记
    调研------典型用户及场景
    “吃神么,买神么”的第二个Sprint计划(总结)
    自动化单元测试工具 EvoSuite 的简单使用 【转载】
    2018(秋)软工作业 6:团队项目-软件设计
    2018(秋)软工作业 5:结对项目之词频统计——增强功能
    2018(秋)软工作业 4:结对项目之词频统计——基本功能
    2018(秋)软工作业 3:个人编程练习
    软件工程教学计划(2018-秋季)
  • 原文地址:https://www.cnblogs.com/albertshine/p/13266106.html
Copyright © 2020-2023  润新知