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

java基礎之Integer與int類型輸出示例解析

 更新時間:2023年06月30日 14:19:54   作者:hello_world  
這篇文章主要為大家介紹了java基礎之Integer與int類型輸出示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

說說下面代碼的輸出:

Integer a1 = 10, b1 = 128;
Integer a2 = 10, b2 = 128;
Integer a3 = new Integer(10);
Integer b3 = new Integer(128);
System.out.println(a1==a2);//true
System.out.println(a1==a3);//false
System.out.println(b1==b2);//false
System.out.println(b1==b3);//false

代碼詳解

Integer為引用對象,那么兩個Integer對象使用"=="比較的就是空間地址,如果a1==a2那就說明a1與a2的空間地址是相同的,為什么會相同呢?b1與b2的空間地址又為什么不相同了呢?

實際上對于第一與第二行代碼,java在編譯期做了優(yōu)化,實際上執(zhí)行的代碼如下

Integer a1 = = Integer.valueOf(10);

那么為什么使用valueOf方法創(chuàng)建Integer對象時a1與a2的空間地址是相同的而b1與b2的空間地址又不同了呢?下圖為valueOf方法的源碼

從圖中可以看到對不同的值會采用不同的創(chuàng)建方式,這一切似乎都與IntegerCache這個對象有關,cache為緩存的意思,不難猜出如果符合if中的條件則從緩存中獲取一個對象,不符合則會new一個對象.

進入到類IntegerCache中

private static class IntegerCache {
//IntegerCache.low的值為-128,被final修飾表示必須賦值且賦值后便不可再次更改
    static final int low = -128;
    //high值雖也被final修飾但并未賦初值,意味著要在后面賦初值
    static final int high;
    //用來存儲緩存的Integer對象
    static final Integer cache[];
    static {
        int h = 127;
//從虛擬機配置中獲取配置"java.lang.Integer.IntegerCache.high"的值,可以自己修改虛擬機配置,默認沒有該條配置
        String integerCacheHighPropValue =
       sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
//將獲取的String配置值轉為int
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
//配置的值若超過int類型能表示的最大值,肯定是不行的,同時也是因為緩存的對象都是存在了數組中而數組的大小也是有上線的,超過數組最大上限就緩存不下了
                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++);
        assert IntegerCache.high >= 127;
    }
    private IntegerCache() {}
}

綜上可以看出在不修改虛擬機配置的情況下,Integer會在第一次調用valueOf方法時將-128與127的Integer對象進行緩存.所有使用valueOf獲取的Integer對象若在范圍-128~127則都為緩存中的同一對象,而不在范圍內的值則會重新new一個Integer對象.回過頭再看看開始的代碼輸出,是否跟預想的結果一致了呢

比較Integer與Integer的大小

若想比較Integer與Integer的大小,使用equals比較即可

再來看看下面代碼的輸出

Integer a1 = new Integer(100); 
int a2 = 100;
Integer a3 = new Integer(100);
//當一個基本類型和一個包裝類型比較時,包裝類型會被自動拆包進行比較
System.out.println(a1 == a2);//true
//equals方法內部調用了intValue方法,該方法會返回Integer對象中使用int修飾的value值,這個過程就是所謂的拆包
System.out.println(a1 == a3);//false
System.out.println(a1.equals(a3));//true

以上就是java基礎之Integer與int類型輸出示例解析的詳細內容,更多關于java類型Integer int的資料請關注腳本之家其它相關文章!

相關文章

  • Java遞歸實現字符串全排列與全組合

    Java遞歸實現字符串全排列與全組合

    這篇文章主要為大家詳細介紹了Java遞歸實現字符串全排列與全組合,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • java實現希爾排序算法

    java實現希爾排序算法

    希爾排序(Shell Sort)是插入排序的一種,是針對直接插入排序算法的改進,是將整個無序列分割成若干小的子序列分別進行插入排序,希爾排序并不穩(wěn)定。該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。
    2015-04-04
  • JavaWeb中Struts2攔截器深入分析(一)

    JavaWeb中Struts2攔截器深入分析(一)

    這篇文章主要為大家詳細介紹了JavaWeb中Struts2攔截器的功能,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot如何整合nacos詳解

    SpringBoot如何整合nacos詳解

    今天教各位小伙伴SpringBoot是如何整合nacos的,文中有非常詳細的代碼示例,對正在學習Java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-06-06
  • java調用shell腳本及注意事項說明

    java調用shell腳本及注意事項說明

    這篇文章主要介紹了java調用shell腳本及注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Cache監(jiān)控配置與使用規(guī)范的建議

    Spring Cache監(jiān)控配置與使用規(guī)范的建議

    這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot?+?layui?框架實現一周免登陸功能示例詳解

    SpringBoot?+?layui?框架實現一周免登陸功能示例詳解

    這篇文章主要介紹了SpringBoot+layui框架實現一周免登陸功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • spring boot 注入 property的三種方式(推薦)

    spring boot 注入 property的三種方式(推薦)

    這篇文章主要介紹了spring boot 注入 property的三種方式,需要的朋友可以參考下
    2017-07-07
  • 如何解決Mybatis-plus中@TableLogic注解失效問題

    如何解決Mybatis-plus中@TableLogic注解失效問題

    這篇文章主要介紹了如何解決Mybatis-plus中@TableLogic注解失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java基于mongodb實現分布式鎖的示例代碼

    java基于mongodb實現分布式鎖的示例代碼

    本文主要介紹了java基于mongodb實現分布式鎖,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論