1. 程式人生 > 實用技巧 >Java字串

Java字串

字串的不可變性

  • 一旦一個string物件在記憶體(堆)中被創建出來,他就無法被修改。
  • String類的所有方法都沒有改變字串本身的值,都是返回了一個新的物件。
  • 如果需要一個可修改的字串,應該使用StringBuffer 或者 StringBuilder。否則會有大量時間浪費在垃圾回收上,因為每次試圖修改都有新的string物件被創建出來。

substring方法

substring(int beginIndex, int endIndex)方法擷取字串並返回其[beginIndex,endIndex-1]範圍內的內容。

字串替換相關方法

  1. replace(CharSequence target, CharSequence replacement) ,用replacement替換所有的target,兩個引數都是字串。
  2. replaceAll(String regex, String replacement) ,用replacement替換所有的regex匹配項,regex是個正則表示式,replacement是字串。
  3. replaceFirst(String regex, String replacement) ,基本和replaceAll相同,區別是隻替換第一個匹配項。

字串拼接

  • 使用+拼接字串
  • String物件的concat方法
  • 可以擴充和修改的StringBuffer,使用append方法進行字串拼接
  • StringBuilder的append方法(StringBuilder和StringBuffer類似,StringBuffer是執行緒安全的)

switch對字串的支援

  • switch對int的判斷是直接比較整數的值
  • switch對char型別進行比較的時候,實際上比較的是ascii碼
  • switch對字串進行比較的實際是雜湊值,然後通過使用equals方法比較進行安全檢查
  • 其實switch只支援一種資料型別,那就是整型,其他資料型別都是轉換成整型之後在使用switch的

Java字串池

在JVM中,為了減少相同的字串的重複建立,為了達到節省記憶體的目的。會單獨開闢一塊記憶體,用於儲存字串常量,這個記憶體區域被叫做字串常量池。

當代碼中出現雙引號形式(字面量)建立字串物件時,JVM 會先對這個字串進行檢查,如果字串常量池中存在相同內容的字串物件的引用,則將這個引用返回;否則,建立新的字串物件,然後將這個引用放入字串常量池,並返回該引用。

字串長度限制

字串有長度限制,在編譯期,要求字串常量池中的常量不能超過65535,並且在javac執行過程中控制了最大值為65534。

在執行期,長度不能超過Int的範圍,否則會拋異常。