bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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

Java中值類型和引用類型的比較與問題解決,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創新互聯建站專注于企業網絡營銷推廣、網站重做改版、韶關網站定制設計、自適應品牌網站建設、H5網站設計、成都商城網站開發、集團公司官網建設、成都外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為韶關等各大城市提供網站開發制作服務。

一、問題描述

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

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

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

引用類型

/**  * 測試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,絕對沒有問題的。

三、問題

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

初始沒問題的情況

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

結果:

當記錄超過一定數的時候,出現問題

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

結果:

四、解決

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

    } 

 }

關于Java中值類型和引用類型的比較與問題解決問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。

分享名稱:Java中值類型和引用類型的比較與問題解決
網址分享:http://vcdvsql.cn/article16/gjijgg.html

成都網站建設公司_創新互聯,為您提供用戶體驗、企業網站制作、企業建站、云服務器、網站維護、網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管