為什么jdk中把String類設計成final的?
有一個解釋就是當定義String類型的靜態字段(也成類字段),可以用靜態變量(非final)代替常量(final)加快程序速度。反之,對于原始數據類型,例如int,也成立。例如,你可能創建一個如下的String對象:private static final String x = "example";對于這個靜態常量(由final關鍵字標識),你使用常量的每個時候都會創建一個臨時的String對象。在字節代碼中,編譯器去掉”x”,代替它的是字符串“example”,以致每次引用”x”時VM都會進行一次哈希表查詢。相比之下,度于靜態變量(非final關鍵字),字符串只創建一次。僅當初始化“x”時,VM才進行哈希表查詢。還有另一個解釋:帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。 另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。