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

Java中值類型和引用類型的比較與問題解決

 更新時間:2019年12月15日 10:28:41   作者:Turtle_Zhang  
這篇文章主要給大家介紹了關于Java中值類型和引用類型的比較與問題解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

一、問題描述

前幾天因為一個需求出現(xiàn)了Bug。說高級點也挺高級,說白點也很簡單。其實也就是一個很簡單的Java基礎入門時候的值類型和引用類型的區(qū)別。只是開發(fā)的時候由于自己的問題,導致小問題的出現(xiàn)。還好突然想起來以前看過一篇對于該問題講解的博客,才能快速定位問題的位置。防止下次再犯,順便也就把這個當做筆記記錄下來,放入自己的Bug集中。

二、值類型和引用類型的比較

這個大家應該都是沒問題的,很簡單。值類型比較是比較值,引用類型是比較地址。對于正常的操作來說,比較值類型我們可以直接使用 == ,引用類型就使用equals來做比較就不會出現(xiàn)問題。

引用類型

/**
  * 測試Integer
  */
 public static void test_Integer(){
  Integer number_01 = 10;
  Integer number_02 = 10;
  System.out.println(number_01.equals(number_02));
 }

上面的測試結果很明顯是true,絕對沒有問題的。

  

值類型

/**
  * 測試int
  */
 public static void test_Int(){
  int number_01 = 10;
  int number_02 = 10;
  System.out.println(number_01 == number_02);
 }

上面的測試結果很明顯是true,絕對沒有問題的。

三、問題

但是問題就出現(xiàn)在,開發(fā)的使用為了防止出現(xiàn)為null的時候會被系統(tǒng)使用0來代替,所以就使用了Integer類型來做操作,并且在比較的時候用了 == 。這就很尷尬了,開始自測完全沒出現(xiàn)問題,因為沒到達記錄數(shù)。很開心,把代碼提交下班,妥妥的。但是尷尬的事情來了,測試報告出現(xiàn)在了郵箱里面了。

初始沒問題的情況

/**
  * 測試Integer
  */
 public static void test_Integer(){
  Integer number_001 = 10;
  Integer number_002 = 10;
  System.out.println(number_001 == number_002);
 }

結果:

當記錄超過一定數(shù)的時候,出現(xiàn)問題

/**
  * 測試Integer
  */
 public static void test_Integer(){
  Integer number_001 = 128;
  Integer number_002 = 128;
  System.out.println(number_001 == number_002);
 }

結果:

四、解決

后面一想,很快確定問題了。是自己的馬虎,偷懶使用了 == ,造成這次問題的出現(xiàn),當改為equals就可以妥妥的回家了。開始自測沒問題主要還是因為Integer 的緩存搞的事情。扒拉到Integer的源碼,發(fā)現(xiàn)里面用了緩存機制,對-128~127的值做了緩存,如果在這個值區(qū)間內(nèi)使用==來做比較的話,比較的就是值了,所以才造成開始以為沒問題,后面運行了一段時間后就出現(xiàn)問題了。當不在值區(qū)間內(nèi)就必須使用equals來完成比較。

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() {}
  }

五、總結

當初面試的時候這種東西應該是背的滾瓜爛熟,絕對可以應對面試。但是一旦開發(fā)起來就是各種問題都出現(xiàn)了,而且這種東西還不會報出錯日志,純屬開發(fā)問題。歸總來說還是自己的水平不夠,還需要繼續(xù)提高。下次要防止這種低級問題的出現(xiàn),很尷尬。同樣也是對自己學的東西要融匯貫通,而不是每學一個單獨的知識點就夠了,沒有起到聯(lián)通的效果。源碼扒拉一下還是會加深自己的印象。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • Mybatis Plus框架項目落地實踐分析總結

    Mybatis Plus框架項目落地實踐分析總結

    這篇文章主要為大家介紹了Mybatis Plus框架項目落地實踐分析總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Spring Boot引入swagger-ui 后swagger-ui.html無法訪問404的問題

    Spring Boot引入swagger-ui 后swagger-ui.html無法訪問404的問題

    這篇文章主要介紹了Spring Boot引入swagger-ui 后swagger-ui.html無法訪問404的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java中 shuffle 算法的使用

    Java中 shuffle 算法的使用

    本篇文章,小編將為大家介紹,在Java中 shuffle 算法的使用,有需要的朋友可以參考一下
    2013-04-04
  • 應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    這篇文章主要介紹了應用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • hibernate多表操作實例代碼

    hibernate多表操作實例代碼

    這篇文章主要介紹了hibernate多表操作實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java如何操作MongoDB常用API文檔

    Java如何操作MongoDB常用API文檔

    這篇文章主要介紹了Java如何操作MongoDB常用API文檔,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot結合JWT實現(xiàn)用戶登錄、注冊、鑒權

    SpringBoot結合JWT實現(xiàn)用戶登錄、注冊、鑒權

    用戶登錄、注冊及鑒權是我們基本所有系統(tǒng)必備的,也是很核心重要的一塊,本文主要介紹了SpringBoot結合JWT實現(xiàn)用戶登錄、注冊、鑒權,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05
  • Spring Boot 深入分析AutoConfigurationImportFilter自動化條件配置源碼

    Spring Boot 深入分析AutoConfigurationImportFilter自動化條件

    這篇文章主要分析了Spring Boot AutoConfigurationImportFilter自動化條件配置源碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-07-07
  • java實現(xiàn)Api接口加密通信方式

    java實現(xiàn)Api接口加密通信方式

    這篇文章主要介紹了java實現(xiàn)Api接口加密通信方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java?精煉解讀數(shù)據(jù)結構的鏈表的概念與實現(xiàn)

    Java?精煉解讀數(shù)據(jù)結構的鏈表的概念與實現(xiàn)

    鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結構,數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針連接次序實現(xiàn)的,每一個鏈表都包含多個節(jié)點,節(jié)點又包含兩個部分,一個是數(shù)據(jù)域,一個是引用域
    2022-03-03

最新評論

乐安县| 巨野县| 从化市| 河津市| 凤凰县| 驻马店市| 台东市| 湘阴县| 石首市| 泌阳县| 鸡泽县| 大竹县| 徐州市| 东城区| 雷波县| 驻马店市| 阿克陶县| 宁乡县| 台安县| 汝州市| 吴桥县| 青州市| 云南省| 洪江市| 尖扎县| 托克托县| 玉林市| 赤壁市| 高青县| 郁南县| 鄯善县| 内丘县| 日土县| 连平县| 阜新市| 闻喜县| 高台县| 石柱| 阿合奇县| 辛集市| 惠来县|