1.什麼是可變物件?
屬性變更時不新建對象的對象,如StringBuiler,可以將其中儲存的字串看作屬性,呼叫StringBuilder.append(String str)追加字串時,是在已有StringBuilder物件的基礎上進行的,沒有新建物件。
基本資料類型的包裝類別以及String類別以外的幾乎全部類別的物件都是可變物件。
2.什麼是不可變物件?
屬性變更時必須新建對象的對象,如String,已有"String str='abc'",再次賦值"str='efg'",此時新建一個String物件儲存“efg”,str指向這個新建的物件。
基本資料類型的包裝類別以及String類別的物件都是不可變物件。
3.可變物件與不可變物件的選擇
#不可變物件代表記憶體中的一個穩定區域,多個引用變數指向同一區域,當一個引用變數嘗試改變對象的內容時,不會改變原對象的內容,而是新建一個對象,這樣就保證了資料的穩定,因此不可變對象通常用在需要保持資料穩定的情況。
在更新可變對象的屬性時不會新建對象,節省記憶體空間,因此可變對象主要用在屬性變化頻繁的情況,如計數器,需要建立統計對象與統計結果之間的映射關係,因此建構一個Map集合。 Integer對像是不可變對象,不適用用來儲存統計結果,應該採用一個可變對象來儲存統計結果,這裡採用數組,當然也可以是自訂對象,其中有一個int屬性用來計數:
public void test01() { String str = "abc efe hig klm nop qrs"; String[] arr = str.split(" "); HashMap<string> map = new HashMap<string>();for (String x : arr) {int[] count = map.get(x);if (count != null) count[0]++;elsemap.put(x, new int[] { 1 }); } }</string></string>
不可變物件有幾個好處:
1. 記憶體分配固定,不需要擴充
2. 可以任意複製多份,不同執行緒之間不需要加鎖解鎖
這就是函數式程式設計中的「變數不變」的特性。其他當然還有一些函數式程式設計提倡的好處,例如程式碼清晰等等,但這個就見仁見智了。
以上是Java中的可變物件與不可變物件比較分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

Dreamweaver CS6
視覺化網頁開發工具