91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解決Java包裝類比較時遇到的問題

發布時間:2020-09-11 20:34:27 來源:腳本之家 閱讀:137 作者:tao不是哭臉 欄目:編程語言

前言

本文主要給大家介紹了關于Java包裝類在比較時遇到的一些問題的解決方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

例1:

  Integer a = 1;
  Integer b = 2;
  Integer c = 3;
  Integer d = 3;
  Integer e= 321;
  Integer f= 321;
  Long g = 3L;
  System.out.println(c == d); //1
  System.out.println(e == f); //2
  System.out.println(c == (a+b)); //3 
  System.out.println(c.equals(a+b));//4
  System.out.println(g == (a+b)); //5
  System.out.println(g.equals(a+b)); //6

輸出結果

true
false
true
true
true
false

      1.包裝類比較,不會自動拆包,但是Integer中會有一個cache 存儲-128到127的數,所以c與d的地址值相同。

      2.地址值比較,沒用到cache

      3.當 '=='時,右側發生自動拆包,所以其實是int值在比較

      4.a+b 時拆包成int,傳入Integer的equals方法進行自動裝包。equals方法內是值比較。

      5.會拆包成基礎數據類型比較

      6.包裝類的equals 會判斷類型,Long.equals(Object object)中判斷類型不符合,返回false。

例2:

  Long a = 1L;
  Integer b = 1;
  System.out.println(a.equals(1)); //7
  System.out.println(a.equals(1L));
  System.out.println(a.equals(b));

輸出

false
true
false

看包裝類源碼會發現比較時會先去判斷類型是否相同。

7.a.equals(1)時,int 1 裝包成Integer,自然和Long不同類型。

 public boolean equals(Object obj) {
  if (obj instanceof Long) {
   return value == ((Long)obj).longValue();
  }
  return false;
 }

總結:

當使用自動拆包/裝包時,包裝類之間比較并不會自動拆包,是地址比較,其中還有緩存會影響結果。

用包裝類的equals方式比較時,由于包裝類并不會自動去轉換類型,所以類型不同時,即使值相同,也會返回false。所以在用包裝類比較數值時,不要用'==',用equals方法時要注意類型相同,或者直接用基礎數據類型比較。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

益阳市| 洞头县| 梨树县| 武汉市| 赤水市| 山西省| 佛学| 当涂县| 逊克县| 营口市| 潞西市| 阳西县| 界首市| 敖汉旗| 安龙县| 武宁县| 乌兰察布市| 莒南县| 密云县| 郑州市| 拉萨市| 宁强县| 辽宁省| 友谊县| 平顶山市| 东海县| 平塘县| 五家渠市| 馆陶县| 溧阳市| 峨边| 莎车县| 肇东市| 辽阳市| 商都县| 平度市| 临沧市| 龙口市| 进贤县| 长治市| 新民市|