String爲什麼是Final的?

1、Final的用途

  • final可修飾類、方法、變量
  • 被final修飾的類不可被繼承、被修飾的方法不能被重寫
  • 被final修飾的變量不可變,必須初始化等

String是被final修飾的類,其屬性value[] 是被final修飾的。所以String是不可被繼承的,value[]被存儲的數據不可更改性

(引用地址不可更改,數組本身可變),但是value[]是private修飾的,而且String是不可被繼承的,所以保證了字符串不可變性

那麼爲什麼要保證String不可變呢?因爲只有當字符串不可變時,才能實現字符串池。提高程序的效率。

  • 字符串池可以節約很多Heap空間,因爲不同的字符串都指向了同一個字符串。
  • 但如果字符串是可變的,字符串池將不能被實現,因爲字符串可變的話,如果變量改變了它的值,那麼其它指向這個地址的字符串的值也會被改變。

因爲字符串是不可變的,所以是多線程安全的,同一個字符串實例可以被多個線程共享。這樣便不用因爲線程安全問題而使用同步。字符串自己便是線程安全的。

因爲字符串時不可變的,所以在它創建的時候HashCode就被緩存了,不需要被重新計算。這就使得字符串很適合做Map的鍵,字符串的處理速度快過其它的鍵對象。

總結:String爲什麼時Final修飾的

  • 實現字符串池(可以提高程序的效率)
  • 實現線程安全
  • 實現String可以創建HashCode不可變性

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章