Integer應該用==仍是equals

問題引出:「Integer應該用==仍是equals」

討論這個問題以前咱們先放一段代碼html

public static void main(String[] args) {

Integer a1 = 2;
Integer a2 = 2;
System.out.println(a1==a2); //true
System.out.println(a1.equals(a2)); //true

Integer a3 = 127;
Integer a4 = 127;
System.out.println(a3==a4); //true
System.out.println(a3.equals(a4)); //true

Integer a5 = -128;
Integer a6 = -128;
System.out.println(a5==a6); //true
System.out.println(a5.equals(a6)); //true
/**
* ----
* */
Integer a11 = 128;
Integer a21 = 128;
System.out.println(a11==a21); //false
System.out.println(a11.equals(a21)); //true


Integer a1111 = -129;
Integer a2111 = -129;
System.out.println(a1111==a2111);//false
System.out.println(a1111.equals(a2111)); //true
}

上述代碼能夠看出 值相同的Integer對象作==操做,有的是true,有的是false,而equals操做的一直是true,爲何會出現這種狀況?spa

咱們首先解釋==操做,爲何有的是true,有的是false:

  討論以前:先要知道對象的==操做,比較的是對象的地址code

   對於 Integer var = ? -128 127 範圍內的賦值, Integer 對象是在IntegerCache.cache 產生,會複用已有對象,好比a1和a2,他們都是指向的同一塊內存空間htm

對象的==操做,比較的是"地址",因此對於-128 至 127 範圍內的Integer 對象,值相同的integer對象都是指向的同一塊內存空間,因此這個區間內的 Integer 值能夠對象

直接使用==進行判斷,可是這個區間以外的全部數據,都會在堆上產生,並不會複用已有對象,這是一個大坑blog

 咱們再來解釋equals,爲何一直是true:

對象的equals,比較的是對象的值,因此只要值相同的Integer對象,使用equals比較的結果,都會是true

內存

 

原文出處:https://www.cnblogs.com/zzh-blog/p/10688492.htmlclass

相關文章
相關標籤/搜索