Java中的String類為什麼用final修飾?

2020-10-25 08:00:25

目錄

一、前言

二、final關鍵字

三、String類中如何使用final關鍵字及其好處

String類的原始碼

不可變性的好處

四、總結


一、前言

相信很多小夥伴在面試的時候都被問到過「Java中的String類為什麼用final修飾?」這個問題,今天帶大家一探究竟,希望小夥伴們在之後面試中遇到這個問題時,能夠很順利的回答出來,順利斬獲高薪offer。

二、final關鍵字

final是Java中的保留關鍵字,可以用來修飾類,方法和變數。其中,被final修飾的類不能被繼承即不能擁有自己的子類,被final修飾方法不能被重寫,final修飾的屬性、變數初始化之後不能被修改。

三、String類中如何使用final關鍵字及其好處

String類的原始碼

從上述原始碼我們可以發現以下兩點:

  • String類用final修飾,代表String類不可被繼承。
  • 用於儲存字串值的char[]陣列用private和final修飾,其中,final可以保證value的參照地址不會被修改,但是不能保證陣列中的值不會被修改,而配合private修飾符,能夠保證值不會被外部修改。這樣就能保證String類的不可變性。

那麼,String類的不可變效能夠帶來哪些好處呢?

不可變性的好處

String類的不可變性帶來的好處總結主要有兩點:

  • 因為String類的不可變性,才能使得JVM可以實現字串常數池;字串常數池可以在程式執行時節約很多記憶體空間,因為不同的字串變數指向相同的字面量時,都是指向字串常數池中的同一個物件。這樣一方面能夠節約記憶體,另一方面也提升了效能。
  • 因為String類的不可變性,從而保證了字串物件在多執行緒環境下是執行緒安全的。如果String類是可變的,那麼會引起很嚴重的安全問題。我們在很多情況下都是直接通過字串傳遞資料,比如資料庫的使用者名稱密碼、網路程式設計中的ip和埠,因為字串是不可變的,所以它的值不能被修改,如果字串是可變的,那麼可以通過改變參照地址指向的值去修改字串的值,從而導致安全漏洞

四、總結

 String類用final修飾一方面保證在多執行緒環境下的執行緒安全,另一方面實現字串常數池節約記憶體和提升效能。

                                                                歡迎關注小強1024實驗室,和小強一起用技術改變世界