首頁 >Java >java教程 >為什麼「CaseInsensitiveString cis = new CaseInsensitiveString('Polish')」可以接受,而「String s = new String('silly')」則不鼓勵記憶體最佳化

為什麼「CaseInsensitiveString cis = new CaseInsensitiveString('Polish')」可以接受,而「String s = new String('silly')」則不鼓勵記憶體最佳化

DDD
DDD原創
2024-11-14 14:09:02372瀏覽

Why is

Java 字串記憶體最佳化:理解「String s = new String("silly")」

有人對以下建議提出了擔憂避免編寫像“String s = new String("silly")”這樣的Java 程式碼。雖然此建議對於優化 String 物件的記憶體使用有效,但可能不適用於其他類別。

為什麼「CaseInsensitiveString cis = new CaseInsensitiveString("Polish")」可以接受?

物件「cis」是 CaseInsensitiveString 類別的實例。與 String 不同,CaseInsensitiveString 是一個使用者定義的類別,需要建構函數來建立物件。因此,需要使用語法“CaseInsensitiveString cis = new CaseInsensitiveString("Polish")”來用指定的字串值初始化物件。

如何讓 CaseInsensitiveString 的行為像 String 一樣進行文字初始化?

要像String 一樣啟用CaseInsensitiveString 的文字初始化,可以實現以下內容:

  • 建立自訂工廠方法:定義靜態方法在CaseCaseCaseCaseCaseCase在類別中,該類別採用文字作為參數並傳回使用該值初始化的類別的實例。此方法將模仿字串文字發生的隱式建構函式呼叫。
  • 實作 valueOf() 方法: 重寫從 Object 繼承的 valueOf() 方法,該方法由 Java 內部使用從文字建立新的 String 實例。透過提供自訂實現,可以直接從文字建立新的 CaseInsensitiveString 物件。

為什麼可以直接將文字傳給 String?

String是Java中的一個特殊類別。它有一個預先定義的內部字串池,其中重複的字串文字儲存為對相同物件的參考。這消除了對相同字串值使用多個 String 物件的需要,從而減少了記憶體消耗。

以上是為什麼「CaseInsensitiveString cis = new CaseInsensitiveString('Polish')」可以接受,而「String s = new String('silly')」則不鼓勵記憶體最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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