最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Integer類型值相等判斷方法

 更新時(shí)間:2021年02月04日 09:52:37   作者:渣渣小碼渣  
這篇文章主要給大家介紹了關(guān)于Java中Integer類型值相等判斷的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

背景

本周開發(fā)中遇到一個(gè)很低級(jí)的問(wèn)題,Integer包裝類的相等判斷,包裝類與基本數(shù)據(jù)類型的區(qū)別,應(yīng)該大多數(shù)人在面試中經(jīng)常被問(wèn)到,但是有的時(shí)候大家都會(huì)煩這些看起來(lái)沒(méi)啥用的東西,面試前還需要去熟悉,博主之前也是這樣認(rèn)為的,但是平時(shí)看一些理論性的東西,在方案探討或者可行性分析時(shí)是很必要的,廢話不多少,看看這個(gè)問(wèn)題吧

事故現(xiàn)場(chǎng)

public static void main(String[] args) {
 Integer a =127;
 Integer b = 127;
 Integer c = 128;
 Integer d = 128;
 Integer e = 129;
 Integer f = 129;

 System.out.println(a==b); //true
 System.out.println(c==d);//false
 System.out.println(e==f);//false
 System.out.println(a.equals(b));//true
 System.out.println(c.equals(d));//true
 System.out.println(e.equals(f));//true
 }

分析原因

上面例子中可以看到127的比較使用==是可以的,128和129就不可以,這種情況去看看Integer是怎么處理的。
打開Integer類全局搜索一下127這個(gè)數(shù)字,為啥要搜這個(gè)127,因?yàn)?27是可以的,128就不行,Integer肯定是對(duì)127做了特殊處理,搜了一下之后,果然有發(fā)現(xiàn)這個(gè)數(shù)字都集中在一個(gè)叫做IntegerCache內(nèi)部類中,代碼如下:

/**
 * Cache to support the object identity semantics of autoboxing for values between
 * -128 and 127 (inclusive) as required by JLS.
 *
 * The cache is initialized on first usage. The size of the cache
 * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
 * During VM initialization, java.lang.Integer.IntegerCache.high property
 * may be set and saved in the private system properties in the
 * sun.misc.VM class.
 */
private static class IntegerCache {
 static final int low = -128;
 static final int high;
 static final Integer cache[];

 static {
  // high value may be configured by property
  int h = 127;
  String integerCacheHighPropValue =
  sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
  if (integerCacheHighPropValue != null) {
  try {
   int i = parseInt(integerCacheHighPropValue);
   i = Math.max(i, 127);
   // Maximum array size is Integer.MAX_VALUE
   h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
  } catch( NumberFormatException nfe) {
   // If the property cannot be parsed into an int, ignore it.
  }
  }
  high = h;

  cache = new Integer[(high - low) + 1];
  int j = low;
  for(int k = 0; k < cache.length; k++)
  cache[k] = new Integer(j++);

  // range [-128, 127] must be interned (JLS7 5.1.7)
  assert IntegerCache.high >= 127;
 }

 private IntegerCache() {}
 }

看這個(gè)內(nèi)部類的描述翻譯過(guò)來(lái)為:

按照java語(yǔ)義規(guī)范要求,緩存以支持值在-128到127(包含)范圍內(nèi)的自動(dòng)裝箱對(duì)象的初始化
緩存在第一次使用時(shí)初始化,緩存的大小由選項(xiàng){@code -XX:AutoBoxCacheMax=<size>}控制,在虛擬機(jī)初始化期間,java.lang.Integer.IntegerCache.high參數(shù)或被復(fù)制并且保存在sun.misc.VM類的私有系統(tǒng)變量中

通俗的來(lái)說(shuō)就是,在-128到127的范圍內(nèi),Integer不對(duì)創(chuàng)建對(duì)象,而是直接取系統(tǒng)緩存中的變量數(shù)據(jù)。

解決

針對(duì)包裝類最好全部使用equals進(jìn)行判斷,Integer得equals方法如下:

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

判斷類型后,將其裝換成int值進(jìn)行大小的判斷,并返回結(jié)果

反思

一些理論雖然平時(shí)不是很有,但是如果對(duì)理論理解不到位,出現(xiàn)理解偏差,這種情況下產(chǎn)生的問(wèn)題,一般走查代碼是很難排查出問(wèn)題的。

總結(jié)

到此這篇關(guān)于Java中Integer類型值相等判斷方法的文章就介紹到這了,更多相關(guān)Java Integer類型值相等判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot應(yīng)用程序同時(shí)支持HTTP和HTTPS協(xié)議的實(shí)現(xiàn)方法

    Spring Boot應(yīng)用程序同時(shí)支持HTTP和HTTPS協(xié)議的實(shí)現(xiàn)方法

    如今,企業(yè)級(jí)應(yīng)用程序的常見場(chǎng)景是同時(shí)支持HTTP和HTTPS兩種協(xié)議,這篇文章考慮如何讓Spring Boot應(yīng)用程序同時(shí)支持HTTP和HTTPS兩種協(xié)議,需要的朋友可以參考下
    2019-10-10
  • java題解LeetCode20.有效的括號(hào)

    java題解LeetCode20.有效的括號(hào)

    這篇文章主要為大家介紹了java題解LeetCode20.有效的括號(hào)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • springcloud中RabbitMQ死信隊(duì)列與延遲交換機(jī)實(shí)現(xiàn)方法

    springcloud中RabbitMQ死信隊(duì)列與延遲交換機(jī)實(shí)現(xiàn)方法

    死信隊(duì)列是消息隊(duì)列中非常重要的概念,同時(shí)我們需要業(yè)務(wù)場(chǎng)景中都需要延遲發(fā)送的概念,比如12306中的30分鐘后未支付訂單取消,那么本期,我們就來(lái)講解死信隊(duì)列,以及如何通過(guò)延遲交換機(jī)來(lái)實(shí)現(xiàn)延遲發(fā)送的需求,感興趣的朋友一起看看吧
    2022-05-05
  • servlet實(shí)現(xiàn)圖片上傳功能

    servlet實(shí)現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了servlet實(shí)現(xiàn)圖片的上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 利用java實(shí)現(xiàn)單詞倒序排列

    利用java實(shí)現(xiàn)單詞倒序排列

    這篇文章就是利用java實(shí)現(xiàn)單詞倒序排列,感覺像是在變魔術(shù),感興趣的小伙伴來(lái)見證一下
    2015-07-07
  • Action訪問(wèn)Servlet的API的簡(jiǎn)單實(shí)例

    Action訪問(wèn)Servlet的API的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇Action訪問(wèn)Servlet的API的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • java8版本base64加密解密的實(shí)例

    java8版本base64加密解密的實(shí)例

    下面小編就為大家分享一篇java8版本base64加密解密的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • springboot+vue+elementsUI實(shí)現(xiàn)分角色注冊(cè)登錄界面功能

    springboot+vue+elementsUI實(shí)現(xiàn)分角色注冊(cè)登錄界面功能

    這篇文章主要給大家介紹了關(guān)于springboot+vue+elementsUI實(shí)現(xiàn)分角色注冊(cè)登錄界面功能的相關(guān)資料,Spring?Boot和Vue.js是兩個(gè)非常流行的開源框架,可以用來(lái)構(gòu)建Web應(yīng)用程序,需要的朋友可以參考下
    2023-07-07
  • 深入淺析springsecurity入門登錄授權(quán)

    深入淺析springsecurity入門登錄授權(quán)

    SpringSecurity為我們提供了基于注解的權(quán)限控制方案,這也是我們項(xiàng)目中主要采用的方式,我們可以使用注解去指定訪問(wèn)對(duì)應(yīng)的資源所需的權(quán)限,這篇文章主要介紹了springsecurity入門登錄授權(quán),需要的朋友可以參考下
    2024-05-05
  • springboot2.0如何通過(guò)fastdfs實(shí)現(xiàn)文件分布式上傳

    springboot2.0如何通過(guò)fastdfs實(shí)現(xiàn)文件分布式上傳

    這篇文章主要介紹了springboot2.0如何通過(guò)fastdfs實(shí)現(xiàn)文件分布式上傳,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

息烽县| 庆元县| 远安县| 九江县| 年辖:市辖区| 苍山县| 康乐县| 尚义县| 永定县| 湖口县| 哈巴河县| 井研县| 乌拉特后旗| 连云港市| 深水埗区| 英吉沙县| 昌邑市| 保德县| 都江堰市| 汤阴县| 米脂县| 莲花县| 陆丰市| 湘阴县| 安宁市| 黄梅县| 天长市| 克东县| 宜都市| 乌鲁木齐县| 陇川县| 赫章县| 罗定市| 亚东县| 湖口县| 宜良县| 乐清市| 昌宁县| 海口市| 苍南县| 庆安县|