从类型上说
Integer 是引用数据类型,而 int是基本数据类型
如果Integer为成员变量(图片中会讲)初始值是null,而int为成员变量初始值是0
举个现实的列子:就拿考试来说,用Integer就可以表示缺考还是考0分;
Java 为每个原始类型提供了包装类型
从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
原始类型: boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
值比较问题
首先需要注意的是i1、i2、i3、i4四个变量都是Integer对象,所以下面的==运算比较的不是值而是引用。
java在编译Integer i2 = 100;的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存;如果看看valueOf的源代码就知道发生了什么。
IntegerCache是Integer的内部类,其代码如下所示:
简单的说,如果值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的测试中中i1==i2的结果是true,而i3==i4的结果是false。
说明
我也是一个Java小白,如果说的不对的话,望大神指教,谢谢!