Java int和Integer区别(基于Integer源码探索)

Java int和Integer区别

1、Java int类型

int是Java基础数据类型
int数据类型是32位,有符号的以二进制补码表示的整数
一般的整型变量默认为int类型
int类型默认值为0
int型范围:-231~231 - 1

2、Java Integer类

Integer实际上是一个类,它是基本数据类型int的包装类
在我们写的类中加入Integer类型的数据,然后查看Integer的实现。可以发现他是一个继承自Number的类,其中定义了诸多方法,有兴趣可以自己研究下。
在这里插入图片描述
以下是Integer的两个构造函数,可以发现它既可以通过int类型数据来构造Integer类对象,也可以通过String类型的数据来构造对象。
在这里插入图片描述

3、int和Integer比较

1、int是基本数据类型,而Integer是类对象,是对基本数据类型的封装。其中包含了自动装箱和自动拆箱
java数据类型有基本数据类型和引用数据类型,为了方便将基本数据类型当作对象处理,java引入了基本数据类型相对应的封装类
自动装箱:自动装箱其实就是将基本数据类型转换为引用数据类型(对象)
自动拆箱:自动拆箱其实就是将引用数据类型转化为基本数据类型

2、int类型直接存储数值,Integer需要实例化对象,指向对象的地址。也就是说Integer变量必须实例化后才能使用,而int变量不需要
3、由于Interger是一个对象,所以在比较过程中也有稍有区别。下面我们通过一段代码来进行比较

	public static void main(String[] args){
        int i = 0;
        int j = 0;
        System.out.print("i == j " + (i == j ? "true":"false"));
        System.out.print("\n");
        Integer a = 0;
        System.out.print("i == a " + (i == a ? "true":"false"));
        System.out.print("\n");
        Integer b = 0;
        System.out.print("a == b " + (a == b ? "true":"false"));
        System.out.print("\n");
        Integer c = 350;
        Integer d = 350;
        System.out.print("c == d " + (c == d ? "true":"false"));
        System.out.print("\n");
        Integer e = new Integer(250);
        Integer f = new Integer(250);
        System.out.print("e == f " + (e == f ? "true":"false"));
        System.out.print("\n");
        int g = 250;
        System.out.print("g == f " + (g == f ? "true":"false"));
        System.out.print("\n");
    }

代码运行结果
在这里插入图片描述
从中我们可以得出以下结论
(1)两个int类型数据数值相等则其相等,如i == j;
(2)int类型数据和Integer类型数据如果其值相等则两者相等,如i == a, Integer会自动拆箱,然后通过数值进行比较
(3)两个Integer类型对象进行比较,我们可以发现当其都为0时,两者相等,但当其都为350时,两者不相等。(如a == b和c == d)原因如下:
当Integer类型数据对象处于以下范围:-128~127;Integer会自动对其进行缓存,不会在new一个新的对象,故此时两者相等,但超出这个范围的时候,Integer会自动new一个新的对象,此时两者不相等。
在这里插入图片描述
(4)当我们使用new来生成两个Integer对象时,即使其数值相等,它们也不会相等,因为这是两个不同的对象。(如e == f)
*

4、结论

  • 如果都是基本数据类型,则两者相等
  • 如果都是new出来的,那么两个是不同的对象,故两者不相等
  • 如果数值大小在-128~127之间,不进行new操作,则两者相等
  • 如果是基本数据类型int和封装的对象Integer数值相等则其相等,如果数值不等,那么他们就不相等,封装对象会有一个自动拆箱来进行比较
发布了16 篇原创文章 · 获赞 33 · 访问量 3119

猜你喜欢

转载自blog.csdn.net/wyg1973017714/article/details/105315719