色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解String對(duì)象的內(nèi)存分配

如意 ? 來源:百家號(hào) ? 作者:米粒教育 ? 2020-07-01 10:09 ? 次閱讀

String對(duì)象有三種創(chuàng)建方式:

第一種方式是直接通過賦值語(yǔ)句,將字符串賦值給String類型的變量。

例如:

String str = “Hello”;

第二種方式是通過new運(yùn)算符,實(shí)例化一個(gè)String對(duì)象,并將對(duì)象引用賦值給String類型的變量。

例如:

String str = new String(“Hello”);

第三種方式是通過String對(duì)象的intern()方法返回一個(gè)String對(duì)象的引用。

例如:

String str = “Hello”。 intern();

前面String對(duì)象的三種創(chuàng)建方式,虛擬機(jī)對(duì)其內(nèi)存分配上是有所區(qū)別的,先來看第一種創(chuàng)建方式。

第一種創(chuàng)建方式是通過賦值語(yǔ)句直接將字符串賦值給String類型的變量。在這種創(chuàng)建方式中,虛擬機(jī)會(huì)在方法區(qū)的常量池中判斷是否存在具有和字符串(如Hello)內(nèi)容相同的String對(duì)象:如果常量池不存在和賦值字符串內(nèi)容相同的對(duì)象,虛擬機(jī)就在常量池中分配內(nèi)存并創(chuàng)建該String對(duì)象,并將String對(duì)象的引用賦值給String類型的變量;如果常量池存在與賦值字符串內(nèi)容相同的對(duì)象,虛擬機(jī)會(huì)直接將該對(duì)象的引用賦值給String類型的變量。這種創(chuàng)建方式對(duì)連續(xù)創(chuàng)建同一字符串內(nèi)容的String對(duì)象特別有用,內(nèi)存利用效率非常高效。

第二種創(chuàng)建方式是通過new運(yùn)算符實(shí)例化String對(duì)象,并將new運(yùn)算符返回的對(duì)象引用賦值給String類型的變量。在這種創(chuàng)建方式中,虛擬機(jī)會(huì)創(chuàng)建兩個(gè)String對(duì)象:一個(gè)String對(duì)象是在常量池中創(chuàng)建,如果常量池中已有字符串內(nèi)容相同的對(duì)象,則不創(chuàng)建;一個(gè)String對(duì)象是在運(yùn)行數(shù)據(jù)區(qū)的堆中創(chuàng)建,將在常量池中創(chuàng)建的String對(duì)象的字符數(shù)組復(fù)制到在堆中創(chuàng)建的String對(duì)象。

String類型的變量接收new運(yùn)算符返回的對(duì)象引用后,如果使用賦值語(yǔ)句對(duì)該String類型的變量重新賦予不同的字符串內(nèi)容,該變量將會(huì)指向一個(gè)新的String對(duì)象,該String對(duì)象會(huì)在常量池中創(chuàng)建。

案例1:建立StringTest1類,在類的main()方法內(nèi)部,使用new運(yùn)算符實(shí)例化一個(gè)String對(duì)象,返回的對(duì)象引用賦值給String類型的變量str,輸出str指向?qū)ο蟮墓4a,然后使用賦值語(yǔ)句將新的字符串內(nèi)容賦值給str,輸出str指向?qū)ο蟮墓4a,驗(yàn)證哈希碼是否一致。

在memory包下新建StringTest1類。代碼如下:

publicclassStringTest1 {

/**

* @Title: main

* @Description: Java程序入口main方法

* @param@paramargs 參數(shù)

* @returnvoid 返回類型

* @throws

*/

publicstaticvoidmain(String[] args) {

// 實(shí)例化String對(duì)象

String str = newString(“Hello”);

System.out.println(“str對(duì)象的哈希碼:” + str.hashCode());

// 修改str對(duì)象的內(nèi)容

str = “Hello World”;

System.out.println(“str對(duì)象修改后的哈希碼:” + str.hashCode());

}

}

程序執(zhí)行結(jié)果如下圖所示:

從程序的執(zhí)行結(jié)果可以看出,當(dāng)對(duì)str重新賦值不同的內(nèi)容后,虛擬機(jī)會(huì)在常量池創(chuàng)建一個(gè)新的String對(duì)象,并將該對(duì)象的引用賦值給str。

第三種創(chuàng)建方式是通過String對(duì)象的intern()方法來返回一個(gè)String對(duì)象的引用。在這種創(chuàng)建方式中,虛擬機(jī)會(huì)首先判斷在常量池中是否存在“Hello”字符串對(duì)象,如果存在就直接返回該對(duì)象的引用,否則就在常量池創(chuàng)建該對(duì)象,并返回對(duì)象的引用。

前面String對(duì)象的內(nèi)存分配經(jīng)常用到常量池,常量池是虛擬機(jī)從運(yùn)行數(shù)據(jù)區(qū)的方法區(qū)劃分出來的一塊內(nèi)存區(qū)域,JDK1.8將常量池放置到運(yùn)行數(shù)據(jù)區(qū)的堆區(qū)域。常量池主要用來存儲(chǔ)字面常量、使用final修飾的變量以及符號(hào)引用。字面常量包括數(shù)值常量(如36、100等)、字符串常量(如“123”、“abc”等)。符號(hào)引用是指用一組符號(hào)來描述引用的目標(biāo),符號(hào)可以是任何形式的字面量,只要使用時(shí)能夠無歧義的定位到目標(biāo)即可。例如編譯器會(huì)把對(duì)象的引用作為一個(gè)符號(hào)引用,因?yàn)榫幾g器不知道對(duì)象引用在內(nèi)存的實(shí)際地址,當(dāng)虛擬機(jī)加載類到運(yùn)行數(shù)據(jù)區(qū)并初始化類后,虛擬機(jī)會(huì)把這些符號(hào)引用轉(zhuǎn)換為直接引用(指向目標(biāo)的內(nèi)存地址,如對(duì)象在堆中的內(nèi)存地址)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2969

    瀏覽量

    104780
  • 內(nèi)存分配
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8307
  • string
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    4735
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解單片機(jī)的內(nèi)存分配

    對(duì)于初學(xué)者而言,對(duì)單片機(jī)的內(nèi)存分配往往最讓人頭疼,很多人學(xué)了單片機(jī)幾年 都不知道單片機(jī)內(nèi)部的內(nèi)存使用情況是如何分配的。要了解 ROM(flash)、RAM(sram)啟動(dòng),首先 需要對(duì)
    發(fā)表于 11-07 10:42 ?2308次閱讀

    C語(yǔ)言既然可以自動(dòng)為變量分配內(nèi)存,為什么還要用動(dòng)態(tài)分配內(nèi)存呢?

    不知道大家在學(xué)習(xí)C語(yǔ)言動(dòng)態(tài)分配內(nèi)存的時(shí)候有沒有過這樣的疑問,既然系統(tǒng)可以自動(dòng)幫我們分配內(nèi)存,為什么還需要我們程序員自己去分配
    發(fā)表于 12-13 11:14 ?1068次閱讀

    單片機(jī)的內(nèi)存分配詳解

    對(duì)于初學(xué)者而言,對(duì)單片機(jī)的內(nèi)存分配往往最讓人頭疼,很多人學(xué)了單片機(jī)幾年 都不知道單片機(jī)內(nèi)部的內(nèi)存使用情況是如何分配的。要了解 ROM、RAM啟動(dòng),首先 需要對(duì) 鏈接器 Linker 如
    發(fā)表于 03-05 15:00

    對(duì)象分配內(nèi)存錯(cuò)誤怎么辦

    請(qǐng)大神幫忙,萬(wàn)分感謝!!!操作系統(tǒng):ucosIII 芯片:STM32F103我的類建立比較多。類對(duì)象是指針CCarriage*gCar;分配內(nèi)存語(yǔ)句:gCar = new CCarriage
    發(fā)表于 05-25 09:51

    Linux內(nèi)存系統(tǒng): Linux 內(nèi)存分配算法

    內(nèi)核中經(jīng)常使用的對(duì)象放到高速緩存中,并且由系統(tǒng)保持為初始的可利用狀態(tài)。比如進(jìn)程描述符,內(nèi)核中會(huì)頻繁對(duì)此數(shù)據(jù)進(jìn)行申請(qǐng)和釋放2) 內(nèi)部碎片· 已經(jīng)被分配出去的的內(nèi)存空間大于請(qǐng)求所需的內(nèi)存
    發(fā)表于 08-24 07:44

    請(qǐng)問JavaScript字符串對(duì)象String是什么?

    字符串對(duì)象 String 提供了對(duì)字符串進(jìn)行處理的屬性和方法
    發(fā)表于 11-05 06:39

    關(guān)于RTT支持的內(nèi)存分配算法

    的融合。 最原始的SLAB算法是Jeff Bonwick為Solaris 操作系統(tǒng)而引入的一種高效內(nèi)核內(nèi)存分配算法。 RT-Thread的SLAB分配器實(shí)現(xiàn)主要是去掉了其中的對(duì)象構(gòu)造及
    發(fā)表于 04-27 14:40

    關(guān)于RTT支持的內(nèi)存分配算法

    的融合。 最原始的SLAB算法是Jeff Bonwick為Solaris 操作系統(tǒng)而引入的一種高效內(nèi)核內(nèi)存分配算法。 RT-Thread的SLAB分配器實(shí)現(xiàn)主要是去掉了其中的對(duì)象構(gòu)造及
    發(fā)表于 04-27 14:42

    java中string不可變的原因

    ABCabc, 然后又讓s的值為123456。 從打印結(jié)果可以看出,s的值確實(shí)改變了。那么怎么還說String對(duì)象是不可變的呢? 其實(shí)這里存在一個(gè)誤區(qū): s只是一個(gè)String對(duì)象的引
    發(fā)表于 09-27 13:24 ?0次下載
    java中<b class='flag-5'>string</b>不可變的原因

    一文詳解Java對(duì)象內(nèi)存布局

    這個(gè)實(shí)例對(duì)象是以怎樣的形態(tài)存在內(nèi)存中的? 一個(gè)Object對(duì)象內(nèi)存中占用多大? 對(duì)象中的屬性是如何在內(nèi)
    發(fā)表于 09-30 14:38 ?1210次閱讀
    一文<b class='flag-5'>詳解</b>Java<b class='flag-5'>對(duì)象</b>的<b class='flag-5'>內(nèi)存</b>布局

    什么是堆內(nèi)存?堆內(nèi)存是如何分配的?

    在一般的編譯系統(tǒng)中,堆內(nèi)存分配方向和棧內(nèi)存是相反的。當(dāng)棧內(nèi)存從高地址向低地址增長(zhǎng)的時(shí)候,堆內(nèi)存從低地址向高地址
    的頭像 發(fā)表于 07-05 17:58 ?9998次閱讀

    字符串string對(duì)象操作的全面總結(jié)

    ? ? 字符串操作看似簡(jiǎn)單,其實(shí)非常重要,不注意的話,經(jīng)常出現(xiàn)代碼運(yùn)行結(jié)果和自己想要的不一致,甚至崩潰。本文總結(jié)了一些構(gòu)建string對(duì)象方法、修改string對(duì)象的方法、
    的頭像 發(fā)表于 11-11 11:23 ?1955次閱讀
    字符串<b class='flag-5'>string</b><b class='flag-5'>對(duì)象</b>操作的全面總結(jié)

    單片機(jī)的內(nèi)存分配(變量的存儲(chǔ)位置)詳解

    對(duì)于初學(xué)者而言,對(duì)單片機(jī)的內(nèi)存分配往往最讓人頭疼,很多人學(xué)了單片機(jī)幾年 都不知道單片機(jī)內(nèi)部的內(nèi)存使用情況是如何分配的。要了解 ROM、RAM啟動(dòng),首先 需要對(duì) 鏈接器 Linker 如
    發(fā)表于 12-31 19:47 ?2次下載
    單片機(jī)的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配</b>(變量的存儲(chǔ)位置)<b class='flag-5'>詳解</b>

    linux內(nèi)存管理中的SLAB分配詳解

    管理區(qū)頁(yè)框分配器,這里我們簡(jiǎn)稱為頁(yè)框分配器,在頁(yè)框分配器中主要是管理物理內(nèi)存,將物理內(nèi)存的頁(yè)框分配
    發(fā)表于 05-17 15:01 ?2212次閱讀
    linux<b class='flag-5'>內(nèi)存</b>管理中的SLAB<b class='flag-5'>分配</b>器<b class='flag-5'>詳解</b>

    bigdecimal轉(zhuǎn)string類型

    情況下,我們可能需要將BigDecimal對(duì)象轉(zhuǎn)換為String類型,例如在進(jìn)行數(shù)據(jù)的持久化、傳輸、展示等場(chǎng)景中。下面將詳細(xì)介紹如何在Java中將BigDecimal轉(zhuǎn)換為String類型。 在Java
    的頭像 發(fā)表于 11-30 11:09 ?6420次閱讀
    主站蜘蛛池模板: 一区两区三不卡| 俄罗斯aaaa一级毛片| 综合色就爱涩涩涩综合婷婷| 日本人娇小hd| 人与禽物videos另类| 小sao货ji巴cao死你视频| 野花影院手机在线观看| 亚洲综合AV在线在线播放| 99免费在线观看| 国产午夜精品久久理论片| 狠狠色丁香婷婷久久综合| 年轻的母亲4线在线观看完整| 臀精插宫NP文| 狠狠色狠狠色综合日日92| 天上人间影院久久国产| 国产精品无码AV天天爽色欲| 性xxx欧美| 金瓶梅 快播| 色欲AV精品一区二区入口| 午夜片无码区在线观看| 19十主播福利视频| 国产乱国产乱老熟300部视频| 伦理片在线线手机版韩国免费观看 | 色噜噜狠狠色综合中文字幕| 亚洲中久无码永久在线| 岛国精品在线观看| 恋夜直播午夜秀场最新| 小SAO货边洗澡边CAO你动漫| qvod播放电影| 国产AV午夜精品一区二区入口| 国产三级在线观看免费| 欧美成人无码A区在线观看免费| 亚洲粉嫩美白在线| 高H各种PLAY全肉NP| 快穿女主有名器的H纯肉黄暴拉文 快插我我好湿啊公交车上做 | 毛片一区二区三区| 日日噜噜夜夜狠狠扒开双腿| 曰本女人牲交视频免费| GAY东北澡堂激情2022| 精品国产品国语在线不卡| 男人的天堂色偷偷|