1.int是基本数据类型(初始值为0),Integer是int的包装类(初始值为null)、引用数据类型;
2.int i=3;Integer j=3;i==j结果为true,因为二者均为常量,Integer自动拆箱(将对象类型转换成基本类型)与int比较,“==”作用于基本类型的时候比较的就是基本类型的值;栈中的值进行比较;
3. Integer i = new Integer(127); Integer j = new Integer(127);i==j结果为false,new值之后,二者为对象,比较的是它们的内存地址;
4.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false;查看源码可知:IntegerCache缓存了[-128,127]之间的Integer对象,如果valueOf的参数i处于这之间,就返回缓存的对象。否则就new一个新的Integer;
参考源码:
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
参考博客:http://www.ticmy.com/?p=110
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html