1. 两个 new Integer() 变量使用“ == ”比较,结果永远是 false ;
Integer i = new Integer(101);
Integer j = new Integer(101);
System.out.print(i == j); // false,比较的本质为比较的对象i和j引用的地址值
2. Integer 变量和 new Integer() 变量使用“ == ”比较,结果永远为 false ;
Integer i = new Integer(100); // 存在堆中
Integer j = 100; // 存在常量池中,实际上的操作是:Integer j = Integer.valueof(100)
System.out.print(i == j); // false
3. 两个 Integer 变量使用“ == ”比较,如果两个变量的值在 [-128, 127] 之间(默认 Integer Cache ),则比较结果为 true (使用缓存中的同一个Integer对象),如果两个变量的值不在此区间,则比较结果为 false (使用新建Integer对象); 例如:
Integer i = 100;
Integer j = 100;
System.out.print(i == j); // true
Integer i = 127;
Integer j = 127;
System.out.print(i == j); // true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); // false
Integer i = -129;
Integer j = -129;
System.out.print(i == j); // false
这里的缓存区间可以根据情况进行调整。
4. int 变量与 Integer变量 或 new Integer()变量 使用“ == ”比较时,只要两个值是相等的,则为 true ;
Integer i = new Integer(100); // 自动拆箱为 int i=100; 此时,相当于两个int的比较
Integer j = 100;
int k = 100;
System.out.print(i == k); // true
System.out.print(k == j); // true
5.测试题:
class Solution{
public static void main(String[] args) {
int a1 = 100;
int a2 = 100;
Integer b1 = new Integer(100);
Integer b2 = new Integer(100);
Integer b3 = new Integer(127);
Integer c1 = 127;
Integer c2 = Integer.valueOf(127);
Integer d1 = -129;
Integer d2 = -129;
System.out.println(a1 == a2); // ①
System.out.println(a1 == b1); // ②
System.out.println(b1 == b2); // ③
System.out.println(b3 == c1); // ④
System.out.println(c1 == c2); // ⑤
System.out.println(d1 == d2); // ⑥
}
}