Java 中對字串物件的字串常數賦值:理解「new String(...)」
在檢查程式碼範例時,您可以遇到使用「new」運算子將String 常數指派給String 物件的情況。這種語法引發了關於其目的和效果的問題,特別是考慮到常數池中字串常數的典型儲存。
「new String(...)」的目的
「new String(...)」的主要目的是建立一個新的String 對象,其中包含指定String 文字的副本。與“s = “Hello World”;”引用常數池中儲存的現有字串文字不同,“s = new String(“Hello World”);”使用自己的字元陣列後備儲存在堆中建立一個新對象。
堆上的分配
是的,在“new String(... )”,在堆上分配一個新物件來儲存 String 的值。這與引用常數池中現有的字串文字相反。
用例和實作依賴
在某些情況下,您可能希望強制使用不同的副本使用「new String(...)」的內部字元數組。例如:
但是,此行為未記錄且依賴實作。不同的 Java 虛擬機器 (JVM) 可能會以不同的方式處理此表達式。
陷阱與限制
Apache Harmony 中 String(String) 的早期實作其實並沒有建立一個底層字元陣列的副本。這可能會導致潛在的記憶體問題,例如即使不再需要也保留對大型字元數組的引用。
要使用單獨的字元副本建立新的String 對象,有必要使用:
這種方法確保了字元的不同副本,但需要兩個陣列副本,可以是
結論
「new String(...)」表達式在堆中建立一個新的 String 對象,其中包含指定 String 文字的副本。雖然它在某些情況下很有用,但重要的是要了解其潛在的陷阱和實現依賴性,以避免意外行為。
以上是何時以及為何在 Java 中使用「new String(...)」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!