观察下面的代码,答案在各个输出语句的后面注释着
public class Test {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1);
System.out.println(i2);
System.out.println(i1 == i2);//false
//这里==比较的是引用数据类型变量,所以最终比较的是指向的对象的地址是否相同
System.out.println(i1.equals(i2));//true
//由于Integer中的equals方法被重写,重写后的功能是比较对象所指向的内容是否相等
System.out.println("----------");
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("----------");
Integer i5 = 127;//直接在缓冲池中获取的
//Integer i = Integer.valueOf(127);
Integer i6 = 127;//直接在缓冲池中获取的
//Integer i = Integer.valueOf(127);
System.out.println(i5 == i6);//true
System.out.println(i5.equals(i6));//true
System.out.println("----------");
Integer i7 = 128;//创建新的空间
//Integer i = Integer.valueOf(128);
Integer i8 = 128;//创建新的空间
//Integer i = Integer.valueOf(128);
System.out.println(i7 == i8);//false//创建新的空间
System.out.println(i7.equals(i8));//true
System.out.println("----------");
//通过查看源代码,我们知道了,针对范围在-128到127的数据,做了一个缓冲池,如果数据在该范围内的,每次并不创建新的空间
//Integer i = Integer.valueOf(1);
}
}
总结:
注意:*
Integer的数据直接赋值,如果数据的范围在-128到127之间(包括边缘值),就会直接从缓冲池中获取。