首頁  >  文章  >  Java  >  Java字串池如何處理`new String(\"literal\")`?

Java字串池如何處理`new String(\"literal\")`?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 12:11:29841瀏覽

How Does the Java String Pool Handle `new String(

字串常數池:澄清誤解

在Java 中,像「abc」這樣的「字串文字」是內部儲存的,這意味著對同一文字值的多個引用指向同一個值記憶體中的實例。這有助於優化記憶體使用和效能。但是,將 new 與字串文字一起使用,例如 new String("abc"),會建立一個新的字串對象,即使該文字已存在於字串池中。

提出了關於字串池的兩個陳述一些混亂:

  • 語句1:「當編譯器遇到字串文字時,它會檢查池以查看是否已存在相同的字串。在表(字串文字池)中,但JVM 在運行時建立一個新的字串物件。在字串池中,但無論如何都會建構一個新物件。
  • 在例如:
  • 由於實習,傳遞給 new String("test") 的引用與兩個相同。然而,一個值為「test」的新 String 物件被建立並賦值給一個。

因此,有兩個獨立的值為「test」的 String 物件:一個在常數池中(被兩個引用)以及用 new 建立的新的(由 1 引用)。這就是為什麼 one.equals(two) 為 true(它們具有相同的值),但 one == Two 為 false(它們引用不同的物件)。

語句1 應該改寫為「當編譯器遇到字串文字,它檢查池中是否已經存在相同的字串。」僅當字串被明確保留或在類別定義中用作文字時,字串才會被保留。

以上是Java字串池如何處理`new String(\"literal\")`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn