int 和 Interger 的区别
首先要知道 int 是八大基本类型之一( 其余七种:byte,char,short,int,long,float,double,boolean )
而 Interger 是类
- Integer是int的包装类,int则是java的一种基本数据类型
- Integer 是类,默认值为null,int是基本数据类型,默认值为0
- Integer 实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
- Integer变量必须先实例,int变量则可以直接使用
int 和 Interger 的比较
1.Integer变量是对一个Integer对象的引用,即得到起所属地址值,在两个通过new生成的Integer变量永远是不相等的,因为new生成的是两个对象,其内存地址不同。
Integer a= new Integer(110);
Integer b= new Integer(110);
//结果为false
System.out.print(a == b);
2.Integer 类的自动装箱和自动拆箱
所谓自动装箱,就是把基本数据类型用他们对应的引用类型包装起来,使他们可以具有对象的特质。例如我们可以把int类型包装成Integer类型的,把double类型的包装成Double类型的。
所谓拆箱,就是进行与自动装箱相反的操作。
自动装箱的过程:当需要一种类型的对象时,这种基本数据类型就自动封装到与它对应的包装类中。
自动拆箱的过程:当需要一个数值时,被装箱的对象中的值就会被自动提取出来,没有必要再去调用intValue()和doubleValue()等方法。
示例:
//装箱是将一个原始数据类型赋值给相应封装类的变量。而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。
int i1 = 1;
int i2 = 1;
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
//两个变量值相等
System.out.println("1:"+(i1 == i2));// true
// integer1拆箱
System.out.println("2:"+(i1 == integer1));// true
// i装箱
System.out.println("3:"+integer1.equals(i1));// true
// 两个对象地址不一样
System.out.println("4:"+(integer1 == integer2));// false
// 两个对象值一样
System.out.println("5:"+integer1.equals(integer2));// true
/* 自动装箱规范要求-128=<boolean、byte、char <= 127, 介于-128~127之间的short和int被包装到固定对象中,
也就是就说,这些范围内的相同值对应同一个对象 */
Integer integer3 = 10,integer4 = 10;
System.out.println("6:"+(integer3 == integer4)); // true
Integer integer5 = -129,integer6 = -129;
System.out.println("7:"+(integer5 == integer6)); // false
Integer integer7 = 128,integer8 = 128;
System.out.println("8==地址比较:"+(integer7 == integer8)+"&8.equas值比较:"+integer7.equals(integer8));
//代码转载于:https://www.cnblogs.com/ckxlovejava/p/7890109.html
3.包装类Integer和基本数据类型int比较,java会自动拆包装为int,然后进行比较,故变为两个int变量的比较
int a = 110;
Integer b = new Integer(110);
//结果为true
System.out.print(a == b);
4.非new生成的Integer变量和new Integer()生成的变量比较,因为非new生成的Integer变量指向的是java堆中的常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,所以两者在内存中的地址不同
Integer a = 110;
Integer b = new Integer(110);
//结果为false
System.out.print(a == b);
5.两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false,原因和代码参考上述2.