摘要:例輸出看包裝類源碼會發(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
摘要:前陣子,我們分享了中的基本數(shù)據(jù)類型轉(zhuǎn)換這篇文章,對許多粉絲還是有帶來幫助的,今天講一下包裝類的的由來,及自動裝箱拆箱的概念和原理。下面是基本數(shù)據(jù)類型與對應(yīng)的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對許多粉絲還是有帶來幫助的,今天講...
摘要:對象頭的另外一部分是類型指針,即對象指向它的類元數(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...
摘要:當復(fù)制集合中的所有元素來創(chuàng)建新的集合時,要求集合中的所有元素必須是同一個枚舉類的枚舉值各實現(xiàn)類的性能分析的性能總比好,特別是最常用的添加查詢元素等操作。因為需要額外的紅黑樹算法來維護集合元素的次序。在創(chuàng)建時進行,以防對集合的意外非同步訪問 HashSet 大多時候使用Set集合時就是使用HashSet實現(xiàn)類。HashSet按Hash算法來存儲集合中的元素,因此具有很好的存取和查找性能 ...
閱讀 2581·2021-07-26 23:38
閱讀 3481·2019-08-30 13:10
閱讀 2372·2019-08-29 18:33
閱讀 2366·2019-08-29 16:12
閱讀 1056·2019-08-29 10:59
閱讀 1838·2019-08-26 17:40
閱讀 826·2019-08-26 11:59
閱讀 861·2019-08-26 11:41