今天做腾讯的模拟笔试题,遇到了一个关于Integer类型的对象相等和equals的问题,题目如下
public class Main{
public static void main(String[] args) {
Integer i1 = 127, i2 = 127, i3 = 128, i4 = 128;
System.out.println(i1.equals(i2));
System.out.println(i1 == i2);
System.out.println(i3.equals(i4));
System.out.println(i3 == i4);
}
}
只是让选择输出的结果,每个选项里面都只有一个false,其余全部为true。下来特意做了一下测试
输出结果是true true true false
然后就上网查了一下,网上给的解释是涉及到自动装箱和拆箱的问题
java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象。如果超出了这个范围,创建的Integer对象就不会被重用,也就是说会在内存中新建一个全新的对象。
特此记录