Integer、new Integer() 和 int 的“==”比较问题

106 阅读1分钟

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); // ⑥
   }
}