java的String在記憶體中如何分配的?

時間 2021-06-20 03:33:26

1樓:陳肖恩

1."myString"是常量,通過編譯期直接定義到常量表中,new String()是執行期指令,基本上new出來的物件都在堆上。可以理解為編譯期常量表定義了"myString"字串,在執行期調取常量new出乙個String物件放到堆裡,兩者引用不一樣。

2.字面量字串可以在編譯器優化,例如常量摺疊,多個相同字段可以建立為相同的常量引用。總之執行時new出來的字串一般沒這個優化,和普通物件一樣。

3.編譯期魔術,常量字串只不過到時和堆字串一樣也會被呼叫出來作為乙個字串物件放到執行棧上呼叫方法操作。

2樓:Charlie W

堆中new出來的例項和常量池中的「myString」是什麼關係呢?

new出來的String指向另一塊記憶體,這塊記憶體儲存的也是「myString」

常量池中的字串常量與堆中的String物件有什麼區別呢?

沒有區別,只是把字串放在堆中更容易產生多個相同的字串,從而浪費空間

為什麼直接定義的字串同樣可以呼叫String物件的各種方法呢?

因為直接定義的字串就是乙個普通的字串物件而已

linux swap分割槽中的內容在記憶體壓力恢復之後會怎樣?

學神來啦 建立乙個普通的linux分割槽 主分割槽 邏輯分割槽均可 fdisk dev sdb command m for help p disk dev sdb 8589 mb,8589934592 bytes 255 heads,63 sectors track,1044 cylinders,t...

java計算金額是放在記憶體中計算還是在sql中計算好呢?

whoishower 看你的資料是否經常變動,如果資料變動很小,可以提前更新在資料庫,提公升下次獲取金額速度,降低下次更新時間,但是如果是熱點資料就不建議這麼做了,常規操作就這樣 沒弄你做什麼東西的會這樣用,設計金額的基本首發都是先把金額換成分單位,在進行計算,精確計算有很多第三方庫使用,主要都是用...

Python3 str在記憶體中的儲存方式?

Coldwings 這種問題就應該去看原始碼。就算不看原始碼,看文件啊 對於Py3.5而言 enum PyUnicode Kind Return pointers to the canonical representation cast to unsigned char,Py UCS2,or Py ...