int和Integer的区别

19 年 7 月 6 日 星期六
341 字
2 分钟

int和Integer的区别

  1. int是八大基本数据类型(byte,char,short,int,long,float,double,boolean)之一,而Integer是int 包装类,所以

    • int的默认值是0
  • Integer的默认值是null
  1. JDK1.5以后,Integer 有自动装箱和拆箱的语法糖。
    • 自动装箱,假如写个Integer a:

      • 其实为:Integer a=Integer.valueOf(int a);
    • 自动拆箱,当涉及到计算时,如a+b:

  • 其实为:a.intValue()+b.intValue();

  1. Integer创建对象时,若数值在[-128,127]区间,第一次声明会将值放入缓存,第二次时会直接将上次缓存里的值给对象,所以地址不变,不是重新创建一个Ingeter 对象。

    public static void main(String[] args) {  Integer i = 10;  Integer j = 10;  System.out.println(i == j);  }//结果为true

    分析源码我们可以知道在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。  那么第一个打印结果因为 i = 10 在缓存表示范围内,所以为 true。

  2. 当值为128时,不放入缓存,会重新创建对象,地址变化:

    Integer i =128;  Integer j = 128;  System.out.println(i == j);  }//结果为false

  3. 两个Integer对象比较时,使用equals

  4. 定义泛型时,必须使用Integer,而不是int,泛型参数必须是一个类,即Object的子类

    Map<String,Object> map1

    Map<Integer,Object> map2

文章标题:int和Integer的区别

文章作者:shirtiny

文章链接:https://kizamu.anror.com/posts/int-and-integer[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。