zoukankan      html  css  js  c++  java
  • int和integer的比较

    程序代码:

            Integer i01 = 59;
            int i02 = 59;
            Integer i03 =Integer.valueOf(59);
            Integer i04 = new Integer(59);
            
            System.out.println(i01==i02);
            System.out.println(i01==i03);
            System.out.println(i03==i04);
            System.out.println(i02==i04);

    输出:
    true
    true
    false
    true

      JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象
      所有只有i04是一个新对象,其他都是同一个对象。所有A,B选项为true
      C选项i03和i04是两个不同的对象,返回false
      D选项i02是基本数据类型,比较的时候比较的是数值,返回true
     

    是否存在此对象,如果存在,则直接返回引用,否则,创建一个新的对象。

    在这里的话,因为程序初次运行,没有   59   ,所以,直接创建了一个新的对象。

    int i02=59   ,这是一个基本类型,存储在栈中。

    Integer i03 =Integer.valueOf(59);   因为   IntegerCache   中已经存在此对象,所以,直接返回引用。

    Integer i04 =       new     Integer(59)   ;直接创建一个新的对象。

    System.       out     .println(i01== i02); i01   是   Integer   对象,   i02   是   int   ,这里比较的不是地址,而是值。   Integer   会自动拆箱成   int   ,然后进行值的比较。所以,为真。

    System.       out     .println(i01== i03);   因为   i03   返回的是   i01   的引用,所以,为真。

    System.       out     .println(i03==i04);   因为   i04   是重新创建的对象,所以   i03,i04   是指向不同的对象,因此比较结果为假。

    System.       out     .println(i02== i04);   因为   i02   是基本类型,所以此时   i04   会自动拆箱,进行值比较,所以,结果为真。

  • 相关阅读:
    JS和C# 里的闭包及闭包在事件中的使用
    ***项目开发记录
    七牛云存储之应用视频上传系统开心得
    二维码及二维码接合短URL的应用
    EF批量添加,删除,修改的扩展
    ngTemplateOutlet递归的问题
    每日新知2019-06-03
    Spring boot初始
    纯前端播放本地音乐
    macbook 安装任意来源
  • 原文地址:https://www.cnblogs.com/Berryxiong/p/6138016.html
Copyright © 2011-2022 走看看