1.int 类型赋值给一个整数值,不管大小,都是在常量池中查找,如果有,返回引用,如果没有,创建再返回引用
2.Integer 类型赋值给一个整数值,
(1) -128 到 127 范围内的值都是先再常量池中查找,如果有,直接返回这个引用,如果没有,则再常量池中创建,再返回这个引用。‘
(2) 如果超出这个范围,则再堆里创建一个 Integer 对象,对象的属性 value 指向常量池中的常量,
3. Integer 和 int 类型进行比较的时候,会将 Integer 类型进行自动拆箱,实际上是 Integer 中的 value 属性和 int 的比较,所以不管是否在 -128到 127 范围之内,只要值相等就相等
4. Integer 和 Integer 类型在比较时候,要看这两个 Integer 是指向的常量池的对象,还是堆中的对象,所以只要有一个是通过 new Integer() 的方式赋值的,因为 new Integer() 方式赋值说明是在堆中创建对象,那就肯定不相等。而如果都是使用常量赋值的,如 Integer i = 10, 因为在 -128到127范围内,都是指向常量池对象,所以相等,如果超出这个范围,就不相等
示例:
package lesson3;
public class StringInMemory {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = new Integer(100);
System.out.println(i1 == i2);// false
Integer i3 = 100;
Integer i4 = 100;
System.out.println(i3 == i4);// true
Integer i5 = 10000;
Integer i6 = 10000;
System.out.println(i5 == i6);// false
int i7 = 10000;
Integer i8 = 10000;
System.out.println(i7 == i8);// true
}
}