对于 Integer 在 -128 ~ 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用 == 进行判断;但是这个区间之外的所有数据,都会在堆上产生,不会复用已有对象。
public static void main(String[] args) {
Integer int_1 = 127;
Integer int_2 = 127;
Integer int_3 = -128;
Integer int_4 = -128;
Integer int_5 = 128;
Integer int_6 = 128;
System.out.println("int_1 == int_2:-----:" + (int_1 == int_2));
System.out.println("int_3 == int_4:-----:" + (int_3 == int_4));
System.out.println("int_5 == int_6:-----:" + (int_5 == int_6));
System.out.println("int_5 == 128:-----:" + (int_5 == 128));
}
Console:
int_1 == int_2:-----:true
int_3 == int_4:-----:true
int_5 == int_6:-----:false
int_5 == 128:-----:true