1. 程式人生 > >String使用final修飾的好處

String使用final修飾的好處

String

概述

String 類被宣告成final型別,不能被繼承
通過char陣列儲存資料,value陣列被final修飾,在value初始化完成後不能被其他陣列引用,在String類方法中沒有改變陣列的方法,確保String不可變

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
private int hash; // Default to 0

String不可變優點

1方便做hash中的key

  • 因為 String 的 hash 值經常被使用,例如 String 用做 HashMap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進行一次計算。

2String pool的需要

  • 如果String被建立了,從String pool中直接獲取引用,只要String 不改變,才能從String pool獲取

3安全性

  • String 經常作為引數,String 不可變性可以保證引數不可變。例如在作為網路連線引數的情況下如果 String 是可變的,那麼在網路連線過程中,String 被改變,改變 String 物件的那一方以為現在連線的是其它主機,而實際情況卻不一定是。

4執行緒安全

  • String 不可變性天生具備執行緒安全,可以在多個執行緒中安全地使用。

String , StringBuffer ,StringBuiler比較

1可變性

  • String是不可變的,
  • StringBuffer 和 StringBuilder是可變的

2執行緒安全性

  • String是不可變的,保證了執行緒的安全性
  • StringBuilder是執行緒不安全的
  • StringBuffer由於有synchronized修飾,所以是執行緒安全的