Java Long類型對(duì)比分析
Java Long類型對(duì)比
在開(kāi)發(fā)的到一個(gè)很基礎(chǔ)的問(wèn)題
在代碼中,兩個(gè)Long類型數(shù)據(jù)比較用“==”,結(jié)果有時(shí)候true有時(shí)候false,原本以為L(zhǎng)ong會(huì)自動(dòng)轉(zhuǎn)long然后再比較,不會(huì)是這里的錯(cuò),找來(lái)找去實(shí)在找不到其他原因了,我就打印這兩個(gè)Long類型出來(lái)看,果然是不相等,于是臉黑了一陣......
去查了一下資料,原來(lái)是這樣:
Java 基本類型的包裝類的大部分都實(shí)現(xiàn)了常量池技術(shù),即Byte,Short,Integer,Long,Character;
這5種包裝類默認(rèn)創(chuàng)建了數(shù)值[-128,127]的相應(yīng)類型的緩存數(shù)據(jù),但是超出此范圍仍然會(huì)去創(chuàng)建新的對(duì)象。
所以
當(dāng)Long型的值超過(guò)了【-128,127】的時(shí)候,他會(huì)new一個(gè)新的對(duì)象,如果沒(méi)有超過(guò)就會(huì)放到緩存中。
所以當(dāng)Long型的值超過(guò)了【-128,127】的時(shí)候,“==”判斷就不會(huì)相等了,可以理解為此時(shí)“==”比較的是兩個(gè)對(duì)象的地址而不是值。
Long class源碼:
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
正確的Long類型比較姿勢(shì):
1.使用Long的longValue()方法,轉(zhuǎn)換成long值進(jìn)行比較
Long a = 128l; Long b = 128l; a.longValue() == b.longValue(); //true
2.使用Long的equals()方法
Long a = 128l; Long b = 128l; a.equals(b); //true
Long class 源碼:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
java Long型和long型的比較大小
一、Long數(shù)據(jù)的大小的比較
對(duì)于Long類型的數(shù)據(jù),這個(gè)數(shù)據(jù)是一個(gè)對(duì)象,所以對(duì)象不可以直接通過(guò)“>”,“==”,“<”的比較,如果要比較兩個(gè)對(duì)象的是否相等的話,我們可以用Long對(duì)象的.equals()方法:

二、long數(shù)據(jù)的大小的比較
對(duì)于long類型的數(shù)據(jù),這個(gè)數(shù)據(jù)是一個(gè)基本數(shù)據(jù)類型,不屬于對(duì)象,所以可以直接通過(guò)“>”,“==”,“<”作比較

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單了解Java關(guān)鍵字throw和throws的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解Java關(guān)鍵字throw和throws的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
解決mybatis批量更新(update foreach)失敗的問(wèn)題
這篇文章主要介紹了解決mybatis批量更新(update foreach)失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Spring Cloud @RefreshScope 原理及使用
這篇文章主要介紹了Spring Cloud @RefreshScope 原理及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式
當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時(shí)需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)2022-02-02
java實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)漢字?jǐn)?shù)字
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)換為漢字?jǐn)?shù)字源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
詳談Java中Object類中的方法以及finalize函數(shù)作用
下面小編就為大家?guī)?lái)一篇詳談Java中Object類中的方法以及finalize函數(shù)作用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04

