Java容器深入淺出之String、StringBuffer、StringBuilder
阿新 • • 發佈:2018-11-04
stat throw 擴容 java 深入淺出 構造方法 world! for col
對字符串的花式處理一直是現代應用系統的主要操作之一,也是對Java基礎知識考察的重要方面。事實上,Java字符串類的底層是通過數組來實現的。具體來說,String類是固定長度的數組,StringBuffer和StringBuilder則是可變長度的,其底層是通過Arrays.copyOf的方法,復制了另外的一個數組,實現了一個內部擴容機制,從而實現一種“偽可變”。
Java字符串要點:
1. String類是不可變類,一旦創建,包含在String對象中的字符數組是不可變的,直至該對象被回收。但是正如數組一樣,可以更改對象的引用,指向另一個String對象。
2. StringBuffer在使用上呈現出一個可變的字符數組的對象,因此有增刪查改的方法。該類通過synchronized同步方法實現線程安全。
3. StringBuilder的構造方法和API與StringBuffer類似,不過是線程不安全的,因此性能較高。
String類構造方法和方法說明
1 package org.leo.demo.arrays; 2 3 import java.io.UnsupportedEncodingException; 4 //因為String類的不可變性,因此所有的連接、截取操作,都不改變原字符串的值。 5 public class TestString { 6 7 public static void main(String[] args) throws UnsupportedEncodingException {8 //字符串初始化 9 String s1 = "Hello World!"; 10 System.out.println(s1); 11 //通過byte[]和碼表來構造字符串 12 byte[] b = {21, 97, 12, 100}; 13 String s3 = new String(b, "utf-8");//有UnsupportedEncodingException異常拋出 14 System.out.println(s3); 15 16 //返回字符串長度 17 String s2 = newString("aeiou"); 18 System.out.println(s2.replace(‘a‘, ‘$‘)); 19 System.out.println("s2.length()" + s2.length()); 20 //通過索引查找字符 21 System.out.println("s2.charAt(2):" + s2.charAt(2)); 22 //查找索引 23 System.out.println("s2.indexOf(‘o‘)" + s2.indexOf(‘o‘)); 24 System.out.println("s2.indexOf(\"io\")" + s2.indexOf("io")); 25 //查找前綴/後綴 26 System.out.println("s2.endsWith(\"ih\")"+s2.endsWith("ih")); 27 System.out.println("s2.startsWith(\"ae\")" + s2.startsWith("ae")); 28 //字符串的比較 29 String s21 = new String("aeiouwww"); 30 String s22 = new String("aewou"); 31 System.out.println("s2.compareTo(s21):"+s2.compareTo(s21)); 32 System.out.println("s2.compareTo(s22):"+s2.compareTo(s22)); 33 StringBuffer sb1 = new StringBuffer("aeiousss"); 34 System.out.println("s2.contentEquals(sb1):"+s2.contentEquals(sb1)); 35 System.out.println("s2.equals(s22)"+s2.equals(s22)); 36 //連接 37 System.out.println(s1.concat(s2));//相當於"+" 38 char[] c = new char[] {‘a‘,‘e‘,‘i‘,‘h‘,‘h‘,‘j‘}; 39 String s4 = String.copyValueOf(c, 1, 3); 40 System.out.println(s4); 41 //數組化 42 byte[] b1 = s4.getBytes(); 43 System.out.println(b1.toString()); 44 s4.getChars(1, 2, c, 2); 45 System.out.println(c.toString()); 46 System.out.println(s4.toCharArray()); 47 48 for(byte cc:b1) { 49 System.out.print(cc + " "); 50 } 51 } 52 53 }
Java容器深入淺出之String、StringBuffer、StringBuilder