区别
- Integer是int的包装类,而int是Java的一种基本数据类型。
- int变量不需要实例化,Integer变量必须实例化才可以使用。
- Integer是对象的引用,当new了一个Integer之后,实际上是生成了一个指针,该指针指向此对象,int则是直接存储数据的数值。
- Integer默认值为null,int默认值为0。
扩展
- 通过new生成的两个Integer对象永远不相等,因为是两个对象,内存地址不同。
- Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(Integer与int比较时,Java会自动拆包,实际上变成了两个int在比较)
- 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)
- 两个非new生成的Integer对象比较数值的时候,如果值在-128到127之间,返回true,其余范围则返回false。
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b); //false
Integer c = new Integer(100);
int d = 100;
System.out.println(c == d); //true
Integer e = new Integer(100);
Integer f = 100;
System.out.println(e == f);//false
Integer g = 100;
Integer h = 100;
System.out.println(g == h); //true
Integer i = 128;
Integer j = 128;
System.out.println(i == j); //false