Java中用“ ”初始化String:一種特殊情況
Java的String類,儘管是面向對象的實體,但可以被初始化使用雙引號。這種特性引發了一個問題:在物件導向程式設計的範圍內,這怎麼可能?
Java 的獨特方法
與Java 中的一切都必須的概念相反作為一個對象,出於性能原因,該語言的設計者選擇保留原始數據類型。與堆疊分配的物件相比,駐留在呼叫堆疊中的基元可提供更快的處理速度和更低的記憶體使用量。
為了平衡這些考慮因素,Java 的 String 被設計為混合體。它的行為類似基元,但也具有物件的一些特徵。
字串文字池
當使用雙引號建立字串文字時,它會直接指派給字串文字池。此池儲存常用字串的共享儲存庫以優化記憶體使用。對同一字串文字的後續引用將從該池中提取,避免不必要的重複。
String Object
相反,當使用“new”實例化 String 物件時運算符,它像其他物件一樣分配在堆上。這些 String 物件是不同的,並佔用自己的記憶體空間。
比較和存儲
為了說明此行為,請考慮以下代碼片段:
String s1 = "Hello"; // String literal String s2 = "Hello"; // String literal String s3 = s1; // Same reference String s4 = new String("Hello"); // String object String s5 = new String("Hello"); // String object
如圖所示,s1、s2、s3 都指向池中同一個String 字面量,而s4 和s5 是不同的String 物件。
意義與注意事項
這種獨特的行為對於字串操作具有重要的影響。由於文字是不可變且共享的,因此修改一個文字會影響對其的所有引用。然而,String 物件是可變的,允許修改特定實例而不影響其他實例。
考慮這些差異對於 Java 程式中高效且正確的字串處理至關重要。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3