1. 程式人生 > >追根溯源---java.lang.String類為什麼是final的?

追根溯源---java.lang.String類為什麼是final的?

java.lang.String類為什麼設計成 final 的?
首先,先得清楚 final 這個關鍵字。
final的出現就是為了為了不想改變,而不想改變的理由有兩點:設計或者效率。final 修飾的類是不被能繼承的,所以 final 修飾的類是不能被篡改的。
瞭解了這一點,我們再看看問題:

1、從設計上講,
1)、確保它們不會在子類中改變語義。String類是final類,這意味著不允許任何人定義String的子類。換言之,如果有一個String的引用,它引用的一定是一個String物件,而不可能是其他類的物件。
2)、String 一旦被建立是不能被修改的,因為 java 設計者將 String 為可以共享的,下面這段是原始碼中的註釋:

/**
* The String class represents character strings. All
* string literals in Java programs, such as "abc", are
* implemented as instances of this class.
*


* Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* Because String objects are immutable they can be shared.
2、從效率上講:
1)、設計成final,JVM才不用對相關方法在虛擬函式表中查詢,而直接定位到String類的相關方法上,提高了執行效率。
2)、Java設計者認為共享帶來的效率更高。

總而言之,就是要保證 java.lang.String 引用引用的物件一定是 java.lang.String的物件,而不是引用它的子孫類,這樣才能保證它的效率和安全。

一點拙見,希望指教。