成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java 包裝類比較時帶來的問題

CloudDeveloper / 3422人閱讀

摘要:例輸出看包裝類源碼會發(fā)現(xiàn)比較時會先去判斷類型是否相同。用包裝類的方式比較時,由于包裝類并不會自動去轉(zhuǎn)換類型,所以類型不同時即使值相同也會返回。所以在用包裝類比較數(shù)值時,不要用用方法時要注意類型相同或者直接用基礎(chǔ)數(shù)據(jù)類型比較。

例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

輸出結(jié)果

true
false
true
true
true
false

1.包裝類比較,不會自動拆包,但是Integer中會有一個cache 存儲-128到127的數(shù),所以c與d的地址值相同。
2.地址值比較,沒用到cache
3.當 "=="時,右側(cè)發(fā)生自動拆包,所以其實是int值在比較
4.a+b 時拆包成int,傳入Integer的equals方法進行自動裝包。equals方法內(nèi)是值比較。
5.會拆包成基礎(chǔ)數(shù)據(jù)類型比較
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

看包裝類源碼會發(fā)現(xiàn)比較時會先去判斷類型是否相同。
7.a.equals(1)時,int 1 裝包成Integer,自然和Long不同類型。

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

總結(jié):
當使用自動拆包/裝包時,包裝類之間比較并不會自動拆包,是地址比較,其中還有緩存會影響結(jié)果。
用包裝類的equals方式比較時,由于包裝類并不會自動去轉(zhuǎn)換類型,所以類型不同時,即使值相同,也會返回false。所以在用包裝類比較數(shù)值時,不要用"==",用equals方法時要注意類型相同,或者直接用基礎(chǔ)數(shù)據(jù)類型比較。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70610.html

相關(guān)文章

  • 深入淺出 Java包裝

    摘要:前陣子,我們分享了中的基本數(shù)據(jù)類型轉(zhuǎn)換這篇文章,對許多粉絲還是有帶來幫助的,今天講一下包裝類的的由來,及自動裝箱拆箱的概念和原理。下面是基本數(shù)據(jù)類型與對應(yīng)的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對許多粉絲還是有帶來幫助的,今天講...

    ytwman 評論0 收藏0
  • java:異常處理

    摘要:異常處理機制異常與異常類的繼承體系在程序中,當程序出現(xiàn)意外情況時,系統(tǒng)會自動生成一個來通知程序,從異常發(fā)生出逐漸向外傳播,如果沒有人來處理該異常,就會交給來處理,對異常的處理方法是,打印異常跟蹤棧信息,并中止程序的執(zhí)行。 1 為什么要處理異常? 異常機制可以使程序的異常處理代碼與正常業(yè)務(wù)代碼分離,保證程序代碼的健壯性。在設(shè)計程序的時候,好的程序需要盡可能處理已知的可能產(chǎn)生的錯誤,但是事...

    LuDongWei 評論0 收藏0
  • int和Integer深入分析

    摘要:對象頭的另外一部分是類型指針,即對象指向它的類元數(shù)據(jù)的指針,虛擬機通過這個指針來確定這個對象是哪個類的實例。并不是所有的虛擬機實現(xiàn)都必須在對象數(shù)據(jù)上保留類型指針,換句話說,查找對象的元數(shù)據(jù)信息并不一定要經(jīng)過對象本身,這點將在節(jié)討論。 目錄介紹 1.關(guān)于int和Integer的問題區(qū)別分析 2.Integer的值緩存的原理 2.1 Java 5 中引入緩存特性 2.2 Intege...

    Half 評論0 收藏0
  • Java 集合 Set

    摘要:當復(fù)制集合中的所有元素來創(chuàng)建新的集合時,要求集合中的所有元素必須是同一個枚舉類的枚舉值各實現(xiàn)類的性能分析的性能總比好,特別是最常用的添加查詢元素等操作。因為需要額外的紅黑樹算法來維護集合元素的次序。在創(chuàng)建時進行,以防對集合的意外非同步訪問 HashSet 大多時候使用Set集合時就是使用HashSet實現(xiàn)類。HashSet按Hash算法來存儲集合中的元素,因此具有很好的存取和查找性能 ...

    verano 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<