你真的了解String嗎


String

String表示一個字符串,它的內部是一個字符數組,只用使用方法比較特殊

例如: String str = "Hello World";

String類的重要特點:字符串是不變的; 它的值在創建后不能被更改。

創建了幾個對象

String str = "Hello";
str += "World";
System.out.println(str);//"HelloWorld"
//整個過程產生了3個String對象;

相等嗎

String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2);//true

String ss1 = new String("Hello");
String ss2 = new String("Hello");
System.out.println(s1 == ss1);//false
System.out.println(ss1 == ss2);//false
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
String s4 = "Hello" + "World";//String s4 = "HelloWorld";
System.out.println(s3 == s4);//true

String s5 = s1 + "World";//String s5 = new String("HelloWorld");
String s6 = "Hello" + s2;//String s6 = new String("HelloWorld");
String s7 = s1 + s2;//String s7 = new String("HelloWorld");
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false

判斷方法

String str1 = "hello";
String str2 = "HELLO";
//1).public boolean equals (Object anObject) :將此字符串與指定對象進行比較。
System.out.println(str1.equals(str2));//false
//2).public boolean equalsIgnoreCase (String anotherString) :將此字符串與指定對象進行比較,忽略大小寫。
System.out.println(str1.equalsIgnoreCase(str2));//true

獲取方法

String str1 = "hello";
String str2 = "world";
/**
*1).public int length () :返回此字符串的長度。
*/
System.out.println(str1.length());//5    
/**
*2).public String concat (String str) :將指定的字符串連接到該
*字符串的末尾。相當於+
*/
System.out.println(str1.concat(str2));//helloworld 
/**
* 3).public char charAt (int index) :返回指定索引處的 char值。
*/
System.out.println(str1.charAt(2));//l   
/**
*4).public int indexOf (String str) :查找參數字符串在本字符串中的
*索引位置。如果沒有出現,返回-1
*/
System.out.println(str1.indexOf("o"));//4
/**
*5).public String substring (int beginIndex) :返回一個子字符串,
*從beginIndex開始截取字符串到字符串結尾。
*/
System.out.println(str1.substring(2));//llo
/**
*6).public String substring (int beginIndex, int endIndex) :
*返回一個子字符串,從beginIndex到endIndex截取字符串。
* 含beginIndex,不含endIndex。
*/
System.out.println(str1.substring(2, 4));//ll

轉換方法

/**
* 1).public String replace (CharSequence target, CharSequence replacement) 
* 將與target匹配的字符串使用replacement字符串替換。
*/
System.out.println(str1.replace("llo", "he"));//hehe

//replace的oldStr只能是字符和字符串,replaceAll指的是正則表達式,比如'\r'回車 '\n'空格

分割方法

String str1 = "h-e-l-l-o";
/**
 * 1).public String[] split(String regex) :將此字符串按照給定的regex
 *(規則)拆分為字符串數組。
 */
for (String s : str1.split("-")) {
  System.out.print(s);
}

StringBuilder

​ StringBuilder是一個可變的字符序列。我們可以把它看成一個可變的字符串。

​ StringBuilder的本質和String一樣,都是由一個字符數組組成的,在使用字符數組保存數據。

構造方法

/**
 * StringBuilder(): 空參構造。使用這個構造方法創建的StringBuilder對象,
*里面不會保存任何內容
 */
StringBuilder stringBuilder = new StringBuilder();
/**
* StringBuilder(String str):會根據參數字符串構建一個StringBuilder對象
*/
StringBuilder strBuilder = new StringBuilder("hello");

常用方法

StringBuilder stringBuilder1 = new StringBuilder("hello");
StringBuilder stringBuilder2 = new StringBuilder("world");
/**
 *   1).append(): 字符串連接
 */
StringBuilder stringBuilder = stringBuilder1.append(stringBuilder2);
System.out.println(stringBuilder);
/**
*   2).toString():返回相同內容的字符串
*/
String string = stringBuilder.toString();
 System.out.println(string);

String與StringBuilder的區別

​ String類的對象內容不可改變,所以每當進行字符串拼接時,總是會在內存中創建一個新的對象,所以經常改變內容的字符串最好不要用String,因為每次生成對象都會對系統性能產生影響。

​ StringBuilder又稱為可變字符序列,是JDK5.0中新增加的一個類,它是一個類似於String的字符串緩沖區,通過某些方法調用可以改變該序列的長度和內容。即它是一個容器,容器中可以裝很多字符串,並且能夠對其中的字符串進行各種操作。它的內部擁有一個數組用來存放字符串內容,進行字符串拼接時,直接在數組中加入新內容,StringBuilder會自動維護數組的擴容。

String StringBuffer StringBuilder

​ String被final修飾,所以String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,所以String s = new String(“helloWorld”); 創建了2個String對象和一個引用。

​ 當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM