- int是基本数据类型,而integer是int的包装类对象,简单的来说Integer类把int类型变成对象,以便于能够使用在基本数据类型不能使用的场合,例如需要往ArrayList,HashMap中存放数据的时候。而这种情况下系统会使用自动装箱拆箱来把int转化成integer对象。
public static void main(String[] args) {
ArrayList a = new ArrayList();
int aa = 11;
Integer aaa = new Integer(aa);
a.add(aa); //在Java1.5之前没有拆箱装箱机制时,该用法是错的
a.add(aaa);
}
- int在初始化的时候默认赋值为0,integer对象在初始化的时候默认赋值为null。
由于自动装箱拆箱机制的存在,integer和int在一些情况下能够被自动转化。
public static void main(String[] args) {
Integer a = 4;
Integer b = 4;
Integer c = 1111;
Integer d = 1111;
System.out.println(a == b); //true
System.out.println(c == d); //false
}
自动装箱拆箱使用了享元模式的设计,在一个byte范围(-128 ~127)内的值被装箱成integer对象的时候会在内存中被重新复用。
与此类似的是,当程序第一次使用某个字符串直接量的时候,Java会使用常量池来缓存该字符串直接量,如果程序后面的部分需要使用该字符串直接量的时候,Java会使用常量池中的字符串直接量。
public static void main(String[] args) {
String a = "aaaa";
String b = "aaaa";
String c = "aa" + "aa";
System.out.println(a == b); //true
System.out.println(a == c); //true
}
总结
如果需要数值进行加减乘除计算的时候,就需要使用int,这个时候使用integer对象也是可以的,但是会消耗系统资源。
如果是需要对象来处理,那就应该声明一个integer对象,或者使用Integer方法把int数值转化成integer对象来处理。