1. 程式人生 > 實用技巧 >為什麼String要用final修飾

為什麼String要用final修飾

String被final修飾

從 String 類的原始碼我們可以看出 String 是被 final 修飾的不可繼承類,原始碼如下:

public final class String 

	implements java.io.Serializable, Comparable<String>, CharSequence { ...... }

那這樣設計有什麼好處呢?

Java 語言之父 James Gosling 的回答是,他會更傾向於使用
final,因為它能夠快取結果,當你在傳參時不需要考慮誰會修改它的值;如果是可變類的話,則有可能需要重新拷貝出來一個新值進行傳參,這樣在效能上就會有一定的損失。

James Gosling 還說:迫使 String
類設計成不可變的另一個原因是安全,當你在呼叫其他方法時,比如呼叫一些系統級操作指令之前,可能會有一系列校驗,如果是可變類的話,可能在你校驗過後,它的內部的值又被改變了,這樣有可能會引起嚴重的系統崩潰問題,這是迫使
String 類設計成不可變類的一個重要原因。

總結來說,使用 final 修飾的第一個好處是安全;第二個好處是高效,以 JVM 中的字串常量池來舉例,如下兩個變數:

String s1 = "java";

String s2 = "java";

只有字串是不可變時,我們才能實現字串常量池,字串常量池可以為我們快取字串,提高程式的執行效率,如下圖所示:

試想一下如果 String 是可變的,那當 s1 的值修改之後,s2 的值也跟著改變了,這樣就和我們預期的結果不相符了,因此也就沒有辦法實現字串常量池的功能了。