為什么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";

只有字符串是不可變時,我們才能實現字符串常量池,字符串常量池可以為我們緩存字符串,提高程序的運行效率,如下圖所示:

image

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM