Java 中的「final」關鍵字可用來定義常數值以及防止變數、方法,或類別被更改或覆寫。另一方面,不變性描述了物件在其存在過程中保持恆定狀態的特徵。物件形成後,其值就不會改變。
變數、方法和類別受到「final」關鍵字的限制,但不變性更進一步,保證了物件的整個狀態得到保留。
讓我們在本文中了解最終與不變性之間的主要差異。
Java 最終版本
Java中的final關鍵字有幾個特點:
最終變數:初始化後其初始值無法修改。它們經常被用來聲明不可更改或不變的值。
最終方法:它們不能被子類別修改,保證它們的行為一致。它們有助於保持重要程序的有效性。
最終類別:它們無法被其他類別擴展,保證它們的實作不會改變。 Final 類別經常用於建立安全性或實用程式類別。
初始化:為了確保最終變數具有已知值,必須在宣告期間或建構函式中為其賦予值。
效能:final 的使用使編譯器能夠更成功地最佳化程式碼,從而可能提高效能。
安全性:Final 透過防止未經授權的敏感資料或行為變更來提高 Java 程式的安全性。
Java 中的不變性
在 Java 中,不可變類別是指物件的內容一旦創建就無法更改的類別。若要建立不可變類,請遵循下列要求:
將類別宣告為 Final 以防止繼承。
將類別的資料成員宣告為私有以限制直接存取。
將資料成員宣告為final,以防止在物件建立後進行修改。
使用參數化建構函式透過深拷貝初始化所有字段,防止透過物件參考進行修改。
在 getter 方法中傳回物件的副本(深層副本),而不是實際的物件引用,以保持不變性。
透過遵循這些特性,您可以在 Java 中建立自己的不可變類,類似於 Integer、Boolean、Byte、Short 和 String 等內建不可變類別。
最終與不變性之間的差異
當涉及 Java 程式設計時,理解「final」和「immutable」之間的區別至關重要。
-
最終:保留物件引用並允許狀態突變
讓我們從「最終」開始。當一個物件或變數在Java中被標記為final時,這表示在給它一個值之後,該參考不能更改為指向另一個物件或變數。重要的是要記住,儘管引用是固定的,但使用相關的 setter 方法仍然允許您更改物件的狀態。因此,即使引用本身無法更改,您仍然可以使用可存取的方法來更改物件的內部屬性或屬性。換句話說,final 確保物件引用的穩定性,同時允許更改其內部狀態。
-
不可變:不可變值和引用靈活性
現在讓我們將注意力轉向「不可變」。在Java中,不變性是指物件在創建後其實際值不能更改。但是,與 Final 不同的是,您可以修改引用本身並將其指派給另一個物件或變數。這意味著雖然物件的值保持不變,但您可以更改其引用以指向不同的實例。
-
應用程式與範圍:Final 和不變性
修飾詞「final」適用於 Java 中的變數而不是物件。它強調對更改引用或變數的限制,同時允許修改物件的狀態。另一方面,不變性適用於對象,表示它們的值一旦創建就不能更改。必須了解這兩個概念之間的區別,以確保 Java 程式達到預期的行為。
-
意義:物件位址和狀態可變性
當我們將一個物件或變數宣告為final時,我們就強制其位址的永久性。換句話說,引用保持固定,防止其指向的位置發生任何變化。相較之下,不變性強調了物件一旦創建就無法修改其狀態。這意味著物件的內部值無法更改,從而在整個程式執行過程中保持其完整性和一致性。
StringerBuffer()
該程式碼示範了 Java 中「final」關鍵字和不變性之間的差異。 “final”關鍵字使變數成為常數並防止重新分配,而不變性意味著物件本身不能被修改。
演算法
第 1 步:宣告變數「sb」作為最終 StringBuffer 對象,初始值為「Hello」。
步驟2:使用append()方法將「TP」追加到「sb」所引用的StringBuffer物件中。
第 3 步:列印「sb」的更新值,即「HelloTP」。
第 4 步:嘗試將新的 StringBuffer 物件重新指派給變數“sb”,這會導致編譯時錯誤。
第五步:印出「sb」的值,但由於上一個錯誤,該行不會被執行。
範例
// Java program to illustrate difference between final and immutability public class Tutorialspoint { public static void main(String[] args) { final StringBuffer sb = new StringBuffer("Hello"); // We can make changes even though reference variable sb is final sb.append("TP"); System.out.println(sb); // Compile time error will appear here. This is because the final variable cannot be reassigned sb = new StringBuffer("Hello World"); System.out.println(sb); } }
輸出
Tutorialspoint.java:16: error: cannot assign a value to final variable sb sb = new StringBuffer("Hello World"); ^ 1 error
結論
總而言之,「最終」和不變性在 Java 中具有截然不同的特徵。 “final”關鍵字限制物件參考的重新分配,但允許修改物件的狀態。
相反,不變性可以防止更改物件的值,但允許重新分配引用。了解「final」和不變性的應用和範圍對於設計可靠的 Java 程式非常重要。當一個物件或變數被宣告為final時,它的位址保持固定,而不變性則確保物件的內部值不能被修改。範例程式碼演示了其中的差異,其中“final”阻止重新分配,從而導致編譯時錯誤。
以上是Java中的Final與不可變性比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultanane deployment.3)testOnOneOnePlatForforurouniverSalpeforuluniverSalpehavior formafforulululyiversalivernave.444.44.444

Java的平台獨立性通過JVM、JIT編譯、標準化、泛型、lambda表達式和ProjectPanama等技術不斷增強。自1990年代以來,Java從基本的JVM演進到高性能的現代JVM,確保了代碼在不同平台的一致性和高效性。

Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用

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