zoukankan      html  css  js  c++  java
  • int 与 Integer的区别

    int和Integer对象的比较

    (1).Integer是int的包装类;int是基本数据类型;Integer1和String一样都是别人封装的类,都是引用数据类型。

    (2).Integer变量必须实例化后才能使用,int变量不需要;

        例:ArrayList<Integer> a = new ArrayList<>();

    (3).Integer实际是对象的引用,指向new的Integer对象,int 是直接存储数据值;

    (4).Integer的默认值是null;int的默认值是0。

    Integer变量和Integer变量、Integer变量和int变量的比较:

      (1)由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址值不同)。

    Integer i= new Integer(100);

    Integer j = new Interger(100);

    System.out.println(i == j);//false

    Integer和Integer对象内存图解

    (2)Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true(因为包装类和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个变量值的比较);

    Integer i = new Integer(100);

    int j =100;

    System.out.println(i ==j);//true

    (3)非new生成的Integer变量和new Integer()生成的变量比较时,结果为fals。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量执行堆中新建的对象,两者在内存中的地址值不同)

    Integer i = new Integer(100);
    Integer j = 100;
    System.out.print(i == j); //false

    (4)对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

    Integer i = 100;

    Integer j = 100;

    System.out.print(i == j); //true

    Integer在进行自动拆装箱(jdk1.5之后)的时候,编译器会使用Integer.valueOf()来构建Integer实例;在valueOf()构建Integer实例的过程中是通过IntegerCache来实现的,IntegerCache值的范围是-128到1237(byte)。在这个范围内是直接返回数值,这个数值是放置于java内存的栈区的,不需要生成对象。

    Integer i = 128;

    Integer j = 128;

    System.out.print(i == j); //false

    而当值大于127的时候就ew Integer(i)生成了新的对象,而生成的对象防止在堆区,也就是说指向了两个不同的内存地址。java API中对Integer类型的valueOf的定义如下,对于-128到127的数,会进行缓存,比如Integer i= 127时,会将127进行缓存,下次再写Integer j = 127是,就会直接从缓存中取值,就不会new了。

  • 相关阅读:
    hdu 5007 水题 (2014西安网赛A题)
    hdu 1698 线段树(成段替换 区间求和)
    poj 3468 线段树 成段增减 区间求和
    hdu 2795 公告板 (单点最值)
    UVaLive 6833 Miscalculation (表达式计算)
    UVaLive 6832 Bit String Reordering (模拟)
    CodeForces 124C Prime Permutation (数论+贪心)
    SPOJ BALNUM (数位DP)
    CodeForces 628D Magic Numbers (数位DP)
    POJ 3252 Round Numbers (数位DP)
  • 原文地址:https://www.cnblogs.com/lk625/p/14017805.html
Copyright © 2011-2022 走看看