String物件誕生的故事,值得你來發現

2021-07-22 19:13:47 字數 1196 閱讀 7235

關於這個問題

這個鏈結裡的喬學士說的挺好的。

我自己的一些看法如下:

【以下是小人的一些拙見,還望大家能給與指點,先謝過了】

問題:產生的新物件有幾個??

string str=「hello」;------①

對於①,此時的str是作為乙個string型別物件的引用。「str」這個引用是存在於棧中的。而「hello」字串是存在於jvm記憶體分割槽中的方法區里。

再細分一點就是在該方法區中的執行時常量池中。它在編譯完成時就在執行時常量池中誕生了。

在①情況下的產生的新物件就只有乙個。就是在

常量池中蹦出來的那個「hello」。

string str2=new string("hello");------②

同樣的,這裡的str2也是作為乙個string型別物件的引用。"str2「作為引用儲存在棧中。【new string("hello")】這麼一大塊兒是在jvm記憶體中的堆區中新開闢了乙個空間。

無論常量池中是否有「hello」這個字串,這個空間都會避開無遺!而這個開闢的新空間中,相當於乙個房子,裡面是不能空的,當然要住人。此刻在之中住的人就是"hello"

君了。此情況下產生的新物件的個數要分兩種情況來考慮。

第一種就是在常量池中已經有了"hello"這個字串,此時新出來的物件就只是會在堆記憶體去中蹦出來(說是蹦,其實就是常量池中的對應物件"hello"複製過來的)。這裡就只有"hello"君乙個人。產生的新物件就是1個。

第二種情況:常量池中並沒有「hello」這個字串物件。開闢空間仍會繼續。這時與上一種情況不同的地方就是這個房子被建好後是允許暫時空著的。此時會先在常量池中生成乙個新的「hello」字串物件("hello"君如出水芙蓉般在常量池中冉冉公升起。。跑題了- -),然後會被拷貝乙份,直接給放到剛才建好的房子裡,就是那個新開闢的空間頭!-

---》這個拷貝的動作是誰執行的呢??我認為是jvm虛擬機器幹的。而且第一種情況下,新開闢空間中的"hello「也是拷貝過去的,而不是重新去誕生的。(理由就是:有原材料不用,簡直沒得道理。而且這個原材料並不會對拷貝出的新物件有任何的影響。)

在②的情況下產生的新物件就是2個。常量池中出水芙蓉的那個"hello",以及急不可耐分身也要住進新房子的"hello".

Windows Phone誕生的幕後故事

赫芬頓郵報 the huffington post 評價windows phone時說 太好了。網路雜誌 slate 認為,windows phone系統是智慧型手機系統中最漂亮的。而techcrunch則評價說 wp遠好於大多android手機。長久以來,微軟被視為缺乏創新的科技企業。科技部落格們...

感人的故事值得分享給大家

感人的故事值得分享給大家 一天,小偷被人追趕,跳到乙個院子裡,正在找地方躲時,你找誰?乙個少女的聲音在背後響起,小偷嚇一跳,愣在那不知如何回答,這時門外傳來急促的敲門聲,少女把門開啟,一群人跑進來,帶頭的人道 有沒有看見個小偷跑進來?沒有啊,我和我男朋友什麼人也沒見到。少女天真的說,說完輕輕地走到小...

PayPal 支付寶誕生的故事 概述起源篇

你知道第三方支付是如何由來的嗎?維基百科 第三方支付 英語 third party payment 指的是由第三方業者居中於買賣家之間進行收付款作業的交易方式。此名詞首先出現於中國,在中國從事第三方支付業務必須申請第三方支付牌照 支付業務許可證 之所以稱 第三方 是因為這些平台並不涉及資金的所有權,...