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

java學(xué)習(xí)之JVM運行時常量池理解

 更新時間:2021年09月16日 09:01:23   作者:玉成226  
這篇文章主要介紹了java學(xué)習(xí)之JVM運行時常量池理解,對常量池的好處以及基本類型的包裝類常量池等作了簡要分析,有需要的朋友可以借鑒參考下

運行時常量池

運行時常量池是方法區(qū)的一部分。Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息時常量池,用于存放編譯期生成的各種字面量和符號引用,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運行時常量池中存放。

運行時常量池相對于Class文件常量池的另外一個重要特征是具備動態(tài)性,Java語言并不要求常量一定只有編譯期才能產(chǎn)生,也就是并非預(yù)置入Class文件中常量池的內(nèi)容才能進(jìn)入方法區(qū)運行時常量池,運行時常量池,運行期間也可能將新的常量放入池中,這種特性被開發(fā)人員利用比較多的就是String類的intern()方法。

常量池的好處

常量池是為了避免頻繁的創(chuàng)建和銷毀對象而影響系統(tǒng)性能,其實現(xiàn)了對象的共享。
例如字符串常量池,在編譯階段就把所有的字符串放到一個常量池中。
(1)節(jié)省內(nèi)存空間:常量池中所有相同的字符串常量被合并,只占用一個空間。
(2)節(jié)省運行時間:比較字符串時,比equals()快。對于兩個引用變量,只用 ""判斷引用是否相等,也就可以判斷實際值相等。

  • 基本數(shù)據(jù)類型之間應(yīng)用雙等號,比較的時他們的數(shù)值。
  • 復(fù)合數(shù)據(jù)類型之間應(yīng)用雙等號,比較的是他們在內(nèi)存中的存放地址。

基本類型的包裝類和常量池

Java中基本類型的包裝類的大部分都實現(xiàn)了常量池技術(shù),即:Byte、Short、Integer、Long、Character、Boolean。

public class NotInitialzation {
    public static void main(String[] args) {
//        System.out.println(SubClass.value);
//        SubClass sbc = new SubClass();
        Integer inte = 10;
        Integer inte1 = 3 + 4;
        Integer a = new Integer(3);
        Integer b = new Integer(4);
        Integer c = a + b;
        Integer d = new Integer(7);
        System.out.println(inte1 == c);//true
        System.out.println(c == a + b);//true
        System.out.println(c == d);//false
        System.out.println("=====================================================");
        String str = "abcd";
        String str1 = "ab";
        String str2 = "abcd" + "ab";
        String str3 = str + str1;
        String str4 = "abcdab";
        System.out.println(str3 == str2);//false
        System.out.println(str2 == str4);//true

    }
}

對編譯class文件進(jìn)行反編譯:

// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   NotInitialzation.java
import java.io.PrintStream;
public class NotInitialzation
{
	public NotInitialzation()
	{
	}
	public static void main(String args[])
	{
		Integer inte = Integer.valueOf(10);
		Integer inte1 = Integer.valueOf(30);
		Integer a = new Integer(3);
		Integer b = new Integer(4);
		Integer c = Integer.valueOf(a.intValue() + b.intValue());
		Integer d = new Integer(7);
		System.out.println(c.intValue() == a.intValue() + b.intValue());
		System.out.println(c == d);
		System.out.println("=====================================================");
		String str = "abcd";
		String str1 = "ab";
		String str2 = "abcdab";
		String str3 = (new StringBuilder()).append(str).append(str1).toString();
		String str4 = "abcdab";
		System.out.println(str3 == str2);
		System.out.println(str2 == str4);
	}
}

Integer inte = 10;java在編譯的時候會直接將代碼封裝成Integer inte = Integer.valueOf(10);從而使用常量池中的對象。

字面量和符號引用

百度百科解釋:在計算機科學(xué)中,字面量(literal)是用于表達(dá)源代碼中一個固定值的表示法(notation),幾乎所有計算機編程語言都具有對基本值的字面量表示,諸如:整數(shù),浮點數(shù)以及字符串;而有很多也對布爾類型的值也支持字面量表示;還有一些甚至對枚舉類型的元素以及像數(shù)組,記錄和對像等復(fù)合類型的值也支持字面量表示法;

以上就是java學(xué)習(xí)之JVM運行時常量池理解的詳細(xì)內(nèi)容,更多關(guān)于JVM運行時常量池的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的FilterOutputStream 簡介_動力節(jié)點Java學(xué)院整理

    Java中的FilterOutputStream 簡介_動力節(jié)點Java學(xué)院整理

    FilterOutputStream 的作用是用來“封裝其它的輸出流,并為它們提供額外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。接下來通過本文給大家簡單介紹下FilterOutputStream知識,需要的朋友參考下吧
    2017-05-05
  • Spring Boot2.0 @ConfigurationProperties使用詳解

    Spring Boot2.0 @ConfigurationProperties使用詳解

    這篇文章主要介紹了Spring Boot2.0 @ConfigurationProperties使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    這篇文章主要介紹了Spring BeanPostProcessor的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java使用反射獲取字段屬性

    Java使用反射獲取字段屬性

    這篇文章主要為大家詳細(xì)介紹了Java如何利用反射實現(xiàn)獲取字段屬性值,文中的示例代碼講解詳細(xì),具有很好的參考價值,希望對大家有所幫助
    2023-06-06
  • 基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值

    基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值

    這篇文章主要介紹了基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot整合FTP實現(xiàn)文件傳輸?shù)牟襟E

    SpringBoot整合FTP實現(xiàn)文件傳輸?shù)牟襟E

    這篇文章主要給大家介紹了SpringBoot整合FTP實現(xiàn)文件傳輸?shù)牟襟E,文中的流程步驟和代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合Netty服務(wù)端的方法示例

    SpringBoot整合Netty服務(wù)端的方法示例

    本文詳細(xì)介紹了SpringBoot和Netty的整合方法,包括添加依賴、創(chuàng)建Netty服務(wù)端代碼解析類、創(chuàng)建字符解析器等步驟,以及開發(fā)過程中遇到的問題及解決方法,感興趣的可以了解一下
    2024-10-10
  • springboot+vue實現(xiàn)登錄功能

    springboot+vue實現(xiàn)登錄功能

    這篇文章主要為大家詳細(xì)介紹了springboot+vue實現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • java使用swt顯示圖片示例分享

    java使用swt顯示圖片示例分享

    這篇文章主要介紹了java使用swt顯示圖片示例,修改后就可變?yōu)閳D片瀏覽器,需要的朋友可以參考下
    2014-02-02
  • 基于Java實現(xiàn)音頻播放功能

    基于Java實現(xiàn)音頻播放功能

    音頻播放是現(xiàn)代應(yīng)用程序中常見的一項功能,無論是在桌面應(yīng)用、游戲開發(fā)、媒體播放器、還是在廣告和提示音效中,下面我們就來看看如何使用Java實現(xiàn)簡單的音頻播放功能吧
    2025-03-03

最新評論

佳木斯市| 拉孜县| 桓仁| 深泽县| 琼中| 烟台市| 光山县| 泰和县| 德格县| 揭西县| 常熟市| 东乡族自治县| 缙云县| 天气| 天柱县| 溆浦县| 东山县| 正蓝旗| 荣成市| 扬中市| 山丹县| 汾西县| 连平县| 呼图壁县| 子长县| 桐城市| 临夏县| 四子王旗| 亚东县| 牙克石市| 堆龙德庆县| 旅游| 铁岭县| 聊城市| 莲花县| 邛崃市| 澄迈县| 双牌县| 潜江市| 玉环县| 博客|