Java Long類型對比分析
Java Long類型對比
在開發(fā)的到一個(gè)很基礎(chǔ)的問題
在代碼中,兩個(gè)Long類型數(shù)據(jù)比較用“==”,結(jié)果有時(shí)候true有時(shí)候false,原本以為Long會(huì)自動(dòng)轉(zhuǎn)long然后再比較,不會(huì)是這里的錯(cuò),找來找去實(shí)在找不到其他原因了,我就打印這兩個(gè)Long類型出來看,果然是不相等,于是臉黑了一陣......
去查了一下資料,原來是這樣:
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)建新的對象。
所以
當(dāng)Long型的值超過了【-128,127】的時(shí)候,他會(huì)new一個(gè)新的對象,如果沒有超過就會(huì)放到緩存中。
所以當(dāng)Long型的值超過了【-128,127】的時(shí)候,“==”判斷就不會(huì)相等了,可以理解為此時(shí)“==”比較的是兩個(gè)對象的地址而不是值。
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類型比較姿勢:
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ù)的大小的比較
對于Long類型的數(shù)據(jù),這個(gè)數(shù)據(jù)是一個(gè)對象,所以對象不可以直接通過“>”,“==”,“<”的比較,如果要比較兩個(gè)對象的是否相等的話,我們可以用Long對象的.equals()方法:
二、long數(shù)據(jù)的大小的比較
對于long類型的數(shù)據(jù),這個(gè)數(shù)據(jù)是一個(gè)基本數(shù)據(jù)類型,不屬于對象,所以可以直接通過“>”,“==”,“<”作比較
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用html css javascript打造自己的RIA圖文教程
用html&css&javascript打造自己的RIA之一,包括了配置等2009-07-07Java開發(fā)Oracle數(shù)據(jù)庫連接JDBC Thin Driver 的三種方法
這篇文章主要介紹了Java開發(fā)Oracle數(shù)據(jù)庫連接JDBC Thin Driver 的三種方法,需要的朋友可以參考下2015-12-12Java中MyBatis Plus知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理一篇關(guān)于Java中MyBatis Plus知識(shí)點(diǎn)總結(jié),需要的朋友們參考下。2019-10-10如何在spring boot中進(jìn)行參數(shù)校驗(yàn)示例詳解
這篇文章主要介紹了如何在spring-boot中進(jìn)行參數(shù)校驗(yàn)及l(fā)ombok的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05淺談BeanPostProcessor加載次序及其對Bean造成的影響分析
這篇文章主要介紹了淺談BeanPostProcessor加載次序及其對Bean造成的影響分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04