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

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

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

運(yùn)行時(shí)常量池

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

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

常量池的好處

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

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

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

Java中基本類型的包裝類的大部分都實(shí)現(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

    }
}

對(duì)編譯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在編譯的時(shí)候會(huì)直接將代碼封裝成Integer inte = Integer.valueOf(10);從而使用常量池中的對(duì)象。

字面量和符號(hào)引用

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

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

相關(guān)文章

  • java中判斷String類型為空和null的幾種方法

    java中判斷String類型為空和null的幾種方法

    判斷一個(gè)字符串是否為空或者為null是一個(gè)常見的操作,本文主要介紹了java中判斷String類型為空和null的幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    本文主要介紹了Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 淺談synchronized方法對(duì)非synchronized方法的影響

    淺談synchronized方法對(duì)非synchronized方法的影響

    下面小編就為大家?guī)硪黄獪\談synchronized方法對(duì)非synchronized方法的影響。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java反射機(jī)制在Spring IOC中的應(yīng)用詳解

    Java反射機(jī)制在Spring IOC中的應(yīng)用詳解

    這篇文章主要介紹了Java反射機(jī)制在Spring IOC中的應(yīng)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析

    Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析

    這篇文章主要介紹了Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 解讀JDK、JRE、JVM的區(qū)別與聯(lián)系

    解讀JDK、JRE、JVM的區(qū)別與聯(lián)系

    這篇文章主要介紹了解讀JDK、JRE、JVM的區(qū)別與聯(lián)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 新手了解java 異常處理基礎(chǔ)知識(shí)

    新手了解java 異常處理基礎(chǔ)知識(shí)

    Java中異常提供了一種識(shí)別及響應(yīng)錯(cuò)誤情況的一致性機(jī)制,有效地異常處理能使程序更加健壯、易于調(diào)試。那么這篇文章總結(jié)了Java有效處理異常的三個(gè)原則,有需要的朋友們可以參考借鑒
    2021-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)優(yōu)先隊(duì)列實(shí)練

    Java數(shù)據(jù)結(jié)構(gòu)優(yōu)先隊(duì)列實(shí)練

    通常都把隊(duì)列比喻成排隊(duì)買東西,大家都很守秩序,先排隊(duì)的人就先買東西。但是優(yōu)先隊(duì)列有所不同,它不遵循先進(jìn)先出的規(guī)則,而是根據(jù)隊(duì)列中元素的優(yōu)先權(quán),優(yōu)先權(quán)最大的先被取出,這篇文章主要介紹了java優(yōu)先隊(duì)列的真題,感興趣的朋友一起看看吧
    2022-07-07
  • java的接口解耦方式

    java的接口解耦方式

    這篇文章主要介紹了java的接口解耦方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java線程間通信的通俗解釋及代碼示例

    java線程間通信的通俗解釋及代碼示例

    這篇文章主要介紹了java線程間通信的通俗解釋,介紹了線程通信中的幾個(gè)相關(guān)概念,然后分享了線程通信的實(shí)現(xiàn)方式及代碼示例,具有一定參考價(jià)值 ,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論