真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中值類型和引用類型比較的示例分析

小編給大家分享一下Java中值類型和引用類型比較的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站頁面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)站建設(shè)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠(chéng)信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。

值類型和引用類型的比較

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

引用類型

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

上面的測(cè)試結(jié)果很明顯是true,絕對(duì)沒有問題的。

Java中值類型和引用類型比較的示例分析  

值類型

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

上面的測(cè)試結(jié)果很明顯是true,絕對(duì)沒有問題的。

Java中值類型和引用類型比較的示例分析

問題

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

初始沒問題的情況

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

結(jié)果:

Java中值類型和引用類型比較的示例分析

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

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

結(jié)果:

Java中值類型和引用類型比較的示例分析

解決

后面一想,很快確定問題了。是自己的馬虎,偷懶使用了 == ,造成這次問題的出現(xiàn),當(dāng)改為equals就可以妥妥的回家了。開始自測(cè)沒問題主要還是因?yàn)镮nteger 的緩存搞的事情。扒拉到Integer的源碼,發(fā)現(xiàn)里面用了緩存機(jī)制,對(duì)-128~127的值做了緩存,如果在這個(gè)值區(qū)間內(nèi)使用==來做比較的話,比較的就是值了,所以才造成開始以為沒問題,后面運(yùn)行了一段時(shí)間后就出現(xiàn)問題了。當(dāng)不在值區(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() {}
  }

以上是“Java中值類型和引用類型比較的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文名稱:Java中值類型和引用類型比較的示例分析
文章鏈接:http://weahome.cn/article/igsegi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部