string s1 = 「abc」;
string s2 = new string(「efg」);
首先,要對jvm執行時資料區有所了解,主要包括棧、堆、方法區,這裡主要涉及到了方法區,方法區主要儲存class檔案對應的資料,class常量池的資料【字面量和符號引用】會在載入階段被載入到執行時常量池中,在解析階段,會在堆中建立多個字串物件【由string型別的符號引用的個數決定】,並將這些物件的引用駐留到字串常量池【後面簡稱串池】中,當我們在程式中使用字面量的方法為string型別變數賦值時,底層會執行ldc指令【載入常量】,ldc會將該字面量在串池中對應的字串物件引用壓人棧頂,當我們使用new關鍵字去建立字串物件時,會直接在堆中開闢一塊空間。
接下來,呼叫intern方法【本地方法】,這個方法可以將首次遇到的字串物件的引用駐留到串池中,jdk1.6是複製物件,jdk1.7+是將該字串物件的引用駐留到串池中,為了確保建立的字串物件是首次遇到,我們這裡只能使用stringbuilder物件進行字串的拼接,最後呼叫stringbuilder的tostring方法。只有這樣,才能保證建立的字串物件不在串池中。
以上就是我的一點拙見,如有錯誤,請指出,輕噴,多謝。
字串相關問題
動態規劃解法 dp i j dp i j dp i j 表示字串 s ss 的前 i ii 個字元中是否包含字串 t tt 的前 j jj 個字元。狀態轉移方程 if s i s j dp i j dp i 1 j 1 else dp i j dp i j 1 逐個查詢法 可以依賴於 str in ...
字串的相關問題
6.程式設計 實現 memcpy 函式,原型 extern void memcpy void dest,void src,unsigned int count 用法 include 功能 由src所指記憶體區域複製count個位元組到dest所指記憶體區域。下面就是 這個函式的實現過程。includ...
leetCode 字串相關問題
125.驗證回文串 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。輸入 a man,a plan,a canal panama 輸出 true 回文串 正讀和反讀都是一樣的字串。public boolean ispalindrome2 string s return ...