麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術(shù)干貨  > Java知識點:String s=new String("xyz")中到底有幾個對象?

Java知識點:String s=new String("xyz")中到底有幾個對象?

來源:千鋒教育
發(fā)布人:wjy
時間: 2022-07-01 17:09:00 1656666540

  掌握了關(guān)于Java內(nèi)存的基礎(chǔ)知識之后,我們就可以對這個面試題有更深入的理解了。

  1. 案例代碼

  我們先編寫面試題中涉及到的代碼,如下所示:

java知識點java面試題1

  代碼很簡單,就一行代碼!那么問題來了,這行代碼中共有幾個對象呢?1個?2個?還是3個?要想弄明白到底有幾個對象,壹哥 就給大家把這段代碼的內(nèi)存分區(qū)繪制了一下(本案例開發(fā)環(huán)境是基于JDK8)。

  2. 內(nèi)存分配(重點)

  在 String s = new String("xyz"); 這行代碼中,s是String類型的變量,不是對象!‘xyz’是字符串對象,new String("xyz")也是一個對象,那么它們幾個的內(nèi)存劃分在JDK8的環(huán)境中,如下圖所示:

java知識點java面試題12

  那么根據(jù)上圖,壹哥 就可以為各位給出本題的答案了,請仔細咯,重點來啦,內(nèi)存分配過程如下:

  當JVM在編譯階段加載讀取到“xyz”的時候,首先會檢查堆中的String常量池,也就是常量緩沖區(qū),檢查是否已經(jīng)有了"xyz"常量對象,如果有,則不會再次創(chuàng)建"xyz"常量對象,并直接返回該字符串的引用地址;如果沒有,則創(chuàng)建一個"xyz"常量對象,并為該對象分配一個內(nèi)存地址002返回。

  當JVM在運行階段加載讀取到new關(guān)鍵字的時候,JVM會在堆中為其創(chuàng)建一個對象,即new String(),并為其分配內(nèi)存地址001,而堆中這個對象的內(nèi)容是上面"xyz"常量對象的引用地址002,換句話說這個堆中存的就是常量池中"xyz"的引用地址002。

  最后,s 是對當前堆中001號對象的一個地址引用,s本身不是一個對象,s只是一個String類型的變量而已!

  3. 變量與對象

  我們還需要弄明白一個問題,即變量與對象的區(qū)別。請問在 String s=new String("xyz");這行代碼中,s是對象嗎?

  String類中有一種創(chuàng)建對象的特殊形式,就是可以使用 ""雙引號 來創(chuàng)建對象,這種創(chuàng)建方式可以在一定程度上提高程序的運行速度,因為JVM會自動根據(jù)常量池中的數(shù)據(jù)存在實際情況來決定是否有必要創(chuàng)建新對象。在String s=new String("xyz")中,實際創(chuàng)建了2個String對象,一個是通過""雙引號,在編譯期創(chuàng)建的"xyz"常量對象;另一個是通過new String(),在運行期創(chuàng)建的。

  但是 s 只是一個String類型的變量,不是對象,它只是對字符串對象的一個引用而已。所謂的對象,應(yīng)該是需要在堆中分配了內(nèi)存的類型才能叫做對象,s位于棧中,所以不是對象!

  4. 問題答案(重點)

  所以String s=new String("xyz")這行代碼中究竟有幾個對象,我們的答案要分兩種情況來考慮:

  ●如果String常量池中已經(jīng)有了"xyz"常量對象,那么答案就是只創(chuàng)建了一個對象,即new String();

  ●如果String常量池中沒有創(chuàng)建"xyz"常量對象,則會創(chuàng)建兩個對象,即一個"xyz"常量對象,一個new String()對象。

  更多關(guān)于“Java培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓經(jīng)驗,課程大綱更科學更專業(yè),有針對零基礎(chǔ)的就業(yè)班,有針對想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實現(xiàn)java程序員夢想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學 138****2860 剛剛成功領(lǐng)取
王同學 131****2015 剛剛成功領(lǐng)取
張同學 133****4652 剛剛成功領(lǐng)取
李同學 135****8607 剛剛成功領(lǐng)取
楊同學 132****5667 剛剛成功領(lǐng)取
岳同學 134****6652 剛剛成功領(lǐng)取
梁同學 157****2950 剛剛成功領(lǐng)取
劉同學 189****1015 剛剛成功領(lǐng)取
張同學 155****4678 剛剛成功領(lǐng)取
鄒同學 139****2907 剛剛成功領(lǐng)取
董同學 138****2867 剛剛成功領(lǐng)取
周同學 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
什么是PlatformIo?

PlatformIO是什么PlatformIO是一個全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

2023-10-14 12:55:06
云快照與自動備份有什么區(qū)別?

1、定義和目標不同云快照的主要目標是提供一種快速恢復數(shù)據(jù)的方法,它只記錄在快照時間點后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動備份的主要目標...詳情>>

2023-10-14 12:48:59
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨特的優(yōu)勢和特點。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
Go為什么不支持三元運算符?

Go為什么不支持三元運算符Go語言是一種以簡潔和有效性為目標的編程語言,因此在設(shè)計過程中,Go的設(shè)計者刻意排除了一些他們認為可能導致復雜性或...詳情>>

2023-10-14 12:12:36
主站蜘蛛池模板: 韩国私人影院| 精品久久洲久久久久护士免费| 伊甸园在线观看国产| 亚洲日本va午夜中文字幕一区| 欧美三级在线播放| 日本高清免费不卡视频| 动漫洗濯屋| 全彩本子里番调教仆人| 国产jav| 亚洲一本高清| 欧美黄三级在线观看| 久久久久久亚洲精品中文字幕| 樱桃视频高清免费观看在线播放| 第四色播日韩第一页| 久久精品国产亚洲精品2020| 亚洲最大成人网色| 粗大的内捧猛烈进出小视频| 亚洲s色大片| 欧美日韩一区二区综合| 亚洲精品aaa揭晓| 草樱免费视频| 国产理论片在线观看| 日韩毛片免费在线观看| 国产毛片儿| 岛国精品在线| 欧美午夜一区二区福利视频 | 欧美亚洲一二三区| 品色堂永久免费| 欧美妈妈的朋友| 高h网站| 免费a级毛片18以上观看精品| 波多野结衣一区二区| 四虎精品成人免费观看| 91精品国产色综合久久不卡蜜| 美国式禁忌3| 北条麻妃74部作品在线观看| 男女生差差差很痛的app| 91蝌蚪在线视频| 蜜汁肉桃h全篇| 好吊妞欧美视频免费高清| 老师的胸好软|