欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Integer值判斷是否相等的問(wèn)題

 更新時(shí)間:2021年01月25日 15:24:39   作者:呆呆的程序猿  
這篇文章主要介紹了基于Integer值判斷是否相等的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

面試中經(jīng)常遇到一個(gè)問(wèn)題:

Integer a = 10;
Integer b = 10; 
System.out.println(a == b); 
a = 1000;
b = 1000; 
System.out.println(a == b);

兩個(gè)打印值分別是多少?

詳解:true;false;

默認(rèn)IntegerCache.low 是-128,Integer.high是127,如果在這個(gè)區(qū)間內(nèi),他就會(huì)把變量i當(dāng)做一個(gè)變量,放到內(nèi)存中;但如果不在這個(gè)范圍內(nèi),就會(huì)去new一個(gè)Integer對(duì)象,在這個(gè)題目中,10在范圍內(nèi),所以直接比較其值;1000不在范圍內(nèi),所以jdk幫我new了兩個(gè)實(shí)例,這樣在用==,肯定是false。

補(bǔ)充:Integer值判斷是否相等問(wèn)題 要用equals判斷不要用“==”判斷

昨天在開(kāi)發(fā)中遇到一個(gè)問(wèn)題,定義了兩個(gè)Integer變量,暫且定義為Integer a; Integer b;

這兩個(gè)值由前端賦值并傳到后臺(tái),前臺(tái)傳的是a = 12345, b = 12345, 但我在后臺(tái)比較的時(shí)候 if (a == b),卻返回false,好無(wú)語(yǔ)啊,不都是123嗎?為什么返回false,后來(lái)改為equals(),返回true,但其中的有些端倪還不太清楚,現(xiàn)總結(jié)下:

我們知道Integer是int的包裝類(lèi),在jdk1.5以上,可以實(shí)現(xiàn)自動(dòng)裝箱拆箱,就是jdk里面會(huì)自動(dòng)幫我們轉(zhuǎn)換,不需要我們手動(dòng)去強(qiáng)轉(zhuǎn),所以我們經(jīng)常在這兩種類(lèi)型中隨意寫(xiě),平時(shí)也沒(méi)什么注意

但I(xiàn)nteger他是對(duì)象,我們知道 == 比較的是堆中的地址,但有個(gè)奇怪的事是, 如果 Integer a = 123, Integer b = 123,可以返回true,但如果Integer a = 12345, Integer b = 12345,返回false,這就是jdk的東西,我們看下Integer的源碼

public static Integer valueOf(int i) {
 if (i >= IntegerCache.low && i <= IntegerCache.high)
  return IntegerCache.cache[i + (-IntegerCache.low)];
 return new Integer(i);
}

默認(rèn)IntegerCache.low 是-127,Integer.high是128,如果在這個(gè)區(qū)間內(nèi),他就會(huì)把變量i當(dāng)做一個(gè)變量,放到內(nèi)存中;但如果不在這個(gè)范圍內(nèi),就會(huì)去new一個(gè)Integer對(duì)象,

而我在代碼中,兩個(gè)Integer值都不在這個(gè)范圍內(nèi),所以jdk幫我new了兩個(gè)實(shí)例,這樣在用==,肯定是false。

所以如果要比較Integer的值,比較靠譜的是通過(guò)Integer.intValue();這樣出來(lái)的就是int值,就可以直接比較了;或者equals()比較

Integer的底層 equals是這樣定義的 先拆箱為int再來(lái)比較

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))

    詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))

    這篇文章主要介紹了SpringBoot中的參數(shù)校驗(yàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    項(xiàng)目里面有用到用戶手機(jī)號(hào)注冊(cè)發(fā)短信功能,本文主要介紹了springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Struts2實(shí)現(xiàn)對(duì)action請(qǐng)求對(duì)象的攔截操作方法

    Struts2實(shí)現(xiàn)對(duì)action請(qǐng)求對(duì)象的攔截操作方法

    這篇文章主要介紹了Struts2實(shí)現(xiàn)對(duì)action請(qǐng)求對(duì)象的攔截操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算

    Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算

    這篇文章主要為大家介紹了Java結(jié)合Kotlin實(shí)現(xiàn)寶寶年齡計(jì)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 用java將GBK工程轉(zhuǎn)為uft8的方法實(shí)例

    用java將GBK工程轉(zhuǎn)為uft8的方法實(shí)例

    本篇文章主要介紹了用java將GBK工程轉(zhuǎn)為uft8的方法實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 多線程Thread,Runnable,Callable實(shí)現(xiàn)方式

    多線程Thread,Runnable,Callable實(shí)現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了Java多線程如何實(shí)現(xiàn)Thread,Runnable,Callable的方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java使用OTP動(dòng)態(tài)口令(每分鐘變一次)進(jìn)行登錄認(rèn)證

    Java使用OTP動(dòng)態(tài)口令(每分鐘變一次)進(jìn)行登錄認(rèn)證

    這篇文章主要介紹了Java使用OTP動(dòng)態(tài)口令(每分鐘變一次)進(jìn)行登錄認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringCloud中的Seata基本介紹與安裝教程

    SpringCloud中的Seata基本介紹與安裝教程

    Seata 是一款開(kāi)源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下
    2024-01-01
  • 一篇文章讓你三分鐘學(xué)會(huì)Java枚舉

    一篇文章讓你三分鐘學(xué)會(huì)Java枚舉

    這篇文章主要給大家介紹了如何通過(guò)三分鐘學(xué)會(huì)Java枚舉的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論