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