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,用于比较数值大小是否相等