第一种情况:
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
第二种情况:
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);
i1 == i2 结果是True
i3 == i4 结果是fasle
具体看Integer类的源码,Integer.class加载到内存的时候,会自动创建一个Integer[]数组,包含-128到127的Integer对象,
自动装箱的时候如果被包装的int数范围在-128到127之间,就会找该Integer数组中对应的对象,而不会创建新的对象,所以第一种情况i1,i2都指向同一个对象,地址值一样,结果为true.
第二种情况被包装的int数如果不在[-128,127]的范围内,就会在堆内存中创建新的Integer对象,所以i3和i4指向不同的对象,地址值不一样,结果为false
|
|