int:是基本数据类型,在变量中直接存放数值,初始化值0;
integer:是引用数据类型,在变量中存放的是该对象的引用,初始化时值为null;
Integer
是
int
类型的包装类,将
int
封装成
Integer
,符合
java
面向对象的特性,可以使用各种方法比如和
其他数据类型间的转换
Integer
和
int
的深入对比:
1.
两个通过
new
生成的
Integer
对象,由于在堆中地址不同,所以永远不相等
2. int
和
Integer
比较时,只要数值相等,结果就相等,因为包装类和基本数据类型比较时,会自动拆 箱,将Integer
转化为
int
3.
通过
new
生成的
Integer
对象和非通过
new
生成的
Integer
对象相比较时,由于前者存放在堆中,后
者存放在
Java
常量池中,所以永远不相等
4.
两个非通过
new
生成的
Integer
对象比较时,如果两个变量的数值相等且在
-128
到
127
之间,结果就 相等。这是因为给Integer
对象赋一个
int
值,
java
在编译时,会自动调用静态方法
valueOf()
,根据
java api
中对
Integer
类型的
valueOf
的定义,对于
-128
到
127
之间的整数,会进行缓存,如果下次再
赋相同的值会直接从缓存中取,即享元模式
int
是基本数据类型,
Integer
是
int
的封装类,是引用类型。
int
默认值是
0
,而
Integer
默认值
是
null
,所以
Integer
能区分出
0
和
null
的情况。一旦
java
看到
null
,就知道这个引用还没有指向某个
对象,再任何引用使用前,必须为其指定一个对象,否则会报错