int和Integer的区别和联系

Java中有8种数据类型,分别为

boolean,char,byte,short,int,long,float,double。

Java是一个面向对象的编程,为了更好的面向对象,JavaJava为每一个基本数据类型都引入了对应的包装类型,对应为

Boolean,Character,Byte,Short,Integer,Long,Float,Double。

下面我们主要通过int和它的包装类integer来学习他们的区别和联系。
最基本的一点区别是:Ingeter是int的包装类,两者默认初值不同。int的初值为0,Ingeter的初值为null。
Ingeter在赋值时可以用new的方式,也可以直接赋予其int值,这时JVM会自动调用valueOf()函数来使之转换为integer类,这一步也可以称为装箱。
当然有装箱自然就有拆箱

int int1 = 12;
Integer integer1 = new Integer(12);
System.out.println(int1 == integer1);    
//输出结果为true

上面的代码对int和integer进行比较时时true,说明两者此时转换成了同一个类型,这里就是自动将integer拆箱成为了int类型,所以两者可以比较。

 Integer integer1 = new Integer(12);
 Integer integer2 = new Integer(12);
 System.out.println(integer1 == integer2);
 //输出结果为false

由于两者都是对象,比较时不会拆箱,会直接进行对象之间的比较,而两个对象即使参数一样也不会被认为相同,所以输出为false。

 Integer a = 128;
 Integer b = 128;
 Integer a1 = 127;
 Integer a2 = 127;
 System.out.println(a1 == a2);    //true                        
 System.out.println(a == b);      //false

上面两者看起来是一模一样的为什么一个是true,一个是false,这是因为Integer作为常量时,对于-128到127之间的数,会进行缓存,也就是说int a1 = 127时,在范围之内,这个时候就存放在缓存中,当再创建a2时,java发现缓存中存在127这个数了,就直接取出来赋值给a2,所以a1 == a2的。当超过范围就是new Integer()来new一个对象了,所以a、b都是new Integer(128)出来的变量,所以它们不等。
总结一下int是一个基本数据类型,而integer是一个类,类的功能要比一个基本数据类型多得多,所以很多功能都可以依赖包装类型,但包装类型也有缺陷,就比如比较的时候会出现问题,所以需要基本数据类型来进行数据的比较。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章