8大基本数据类型中,Byte、Short、Integer、Long在直接给包装类赋值为基本类型时,会缓存-128~127之间的值,不会创建新对象(此外Charater在0~128之间也会缓存,亲测)
但是,最近面试题让我很疑惑
public static void main(String[] args) {
Integer i1 = Integer.valueOf(127);
Integer i2 = Integer.valueOf(127);
Integer i3 = new Integer(127);
Integer i4 = new Integer(127);
Integer i5 = 127;
System.out.println(i1 == i2);
System.out.println(i1 == i3);
System.out.println(i3 == i4);
System.out.println(i3 == i5);
System.out.println(i1 == i5);
}
运行之后,结果并没有让人意外:
true
false
false
false
true
总结:通过new创建时,和没有new的肯定不是同一个对象,其余情况下==比较都是true
注意:此处不能使用equals()方法比较,因为包装类重写了equals,用于比较数值大小是否相等



