Integer 和 int 的区别

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/PZHU_CG_CSDN/article/details/81052000

一、int 和 Integer 的区别:

  1. Integer 是 int 的包装类,int 是 java 中的基本数据类型。

  2. Integer 对象必须是实例化后才能使用,而 int 变量不需要实例化。

  3. Integer 实际是对象的引用,当 new 一个 Integer 时,实际上是生成一个指针指向此对象;而 int 则是直接存储数据值。

  4. Integer 的默认值是 null,int 的默认值是 0

二、Integer 和 int 的比较

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


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

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


    Integer i = new Integer(10);
    int j = 10;
    System.out.println(i == j);//true

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


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

    Integer x = 128;
    Integer y = 128;
    System.out.println(x == y);//false

  这是因为 java 在编译 Integer i = 127 ,会翻译为 Integer i = Integer.valueOf(127),在 java 中定义如下

  java 对于 -128~127 之间的数会进行缓存,Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会再去创建新的变量,会存在内存中被重用,始终只存在一个对象,也是享元模式的一种。

4.对于非 new 生成的 Integer 对象,和 new 生成的 Integer 对象,结果为 false,因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同


    Integer a = new Integer(200);
    Integer b = 200;

    System.out.println(a == b);//false

猜你喜欢

转载自blog.csdn.net/PZHU_CG_CSDN/article/details/81052000