1、Integer 类简介
首先我们大致看一下Integer是什么,Integer 类在JDK1.0的时候就有了,它是一个类,是 int 基本数据类型的封装类
2、Integer 类和 int 的区别
①、Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean)
②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;
③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。
直接上代码:
int n1 = 128;
// 先在栈创建一个n1引用 再看栈中有没有128这个值 没有就存入128 n1指向这个地址 有就直接指向这个地址
Integer n2 = new Integer(128);
System.out.println(n1 == n2); // ture n2 自动进行拆箱调用intValue()变成int进行比较
Integer n3 = new Integer(127);
Integer n4 = new Integer(127);
System.out.println(n3 == n4); // false 比较的对象地址
// 直接对Integer赋值时是调用Integer的valueOf方法 此方法会对-128~127之间的Integer对象进行缓存
// 对于-128~127之间的值 如果存在直接指向该对象地址
Integer n5 = 127; // 相当于 Integer.valueOf(127)
Integer n6 = 127; //
System.out.println(n5 == n6); // true
Integer n7 = 128; // 相当于 Integer.valueOf(128)
Integer n8 = 128; //
System.out.println(n7 == n8); // false
Integer n9 = n7 - 1;
System.out.println(n6 == n9); // true
①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,n3的引用指向堆,而new Integer()指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false。
②两个都是非new出来的Integer,如果数在-128到127之间,则是true(如n5 n6),否则为false。java在编译Integer n7 = 128的时候,被翻译成-> Integer n7 = Integer.valueOf(128); 而valueOf()函数会对-128到127之间的数进行缓存。
③两个都是new出来的,都为false(n3,n4)。
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比(如n1, n2)。
int 是在栈里创建的,Integer是在堆里创建的。栈里创建的变量要比在堆创建的速度快得多
。