往期:
JAVA 修煉秘籍第一章:《痛苦的折磨》
JAVA 修煉秘籍第二章:《逐漸魔化》
JAVA 修煉秘籍第三章:《絕地反擊》
JAVA 修煉秘籍第四章:《閉關修煉》
JAVA 修煉秘籍第五章:《臥薪嘗膽》
JAVA 修煉秘籍第六章:《鏖戰》
JAVA 修煉秘籍第七章:《面向物件編程》
JAVA修煉秘籍(番外篇)第一章:《這四道代碼題,你真的會嗎?》
JAVA修煉秘籍(番外篇)第二章:《圖書館管理系統》
——————————————————————生活以痛吻我,我卻報之以歌,

文章目錄
- 一、String
- 1. 創建字串
- 2. 字串常量池
- 1. 介紹
- 2. 存盤形式
- 3. String 中‘+’號連接符
- 1. 介紹
- 2. ‘+’號連接符的運行程序
- 3. ‘+’號連接符的速度
- 4. intern方法
- 5. Stirng中常用的方法
- 1. int length()
- 2. char charAt(int index)
- 3. Stirng subString(int beginIndex)
- 4. String subString(int beginIndex,int endIndex)
- 5. int compareTo(String anotherString)
- 6. int compareTolgnoreCase(String anotherString)
- 7. boolean equals(Object anotherObject)
- 8. boolean equalsIgnoreCase(String anotherString)
- 9. String concat(String str)
- 10. int indexOf(int ch或String str)
- 11. int indexOf(int ch或String str , int fromIndex)
- 12. int lastIndexOf(int ch或String str)
- 13. lastIndexOf(int ch或String str , int fromIndex)
- 14. String toLowerCase();
- 15. String toUpperCase()
- 16. String replace(char oldChar,char newChar)
- 17. String replaceFirst(String regex,String replacement)
- 18. String replaceAll(String regex, String replacement)
- 19.String trim()
- 20. Boolean contains(String str)
- 21.String[] split(String str)
- 6. 字串與基本型別的轉換
- 1. 字串轉換為基本型別
- 2.基本型別轉換為字串型別,
一、String
前言:字串廣泛應用于JAVA編程中,而JAVA中的字串屬于物件,JAVA中創建了String類來操作和創建字串,
1. 創建字串
String類有11種構造方法,創建字串最簡單的方式,
String str="Hello";
遇到"Hello"這個字串常量時,編譯器會使用該值創建一個String物件,和其他物件一樣,也可以使用關鍵字和構造方法來進行創建,如下,
String str=new String("Hello");
char[] str1={'H','e','l','l','o'};
String str2=new String(str1);
String創建的字串存盤在字串常量池中,而new創建的字串物件存盤在堆上,
2. 字串常量池
1. 介紹
- 字串常量池 ——> 常量池 ——> 公共池,
- 字串常量池是通過一個StringTable類實作的,它是一個Hash表默認值大小長度是1009,
- 常量池中不存在重復的兩個相同的物件,
2. 存盤形式
String str1="Hello";
String str2="Hello";
String str3=new String("Hello");
System.out.println(str1==str2);
System.out.println(str1==str3);
圖解:

- str1查看常量池中是否存在"Hello",結果為不存在,則"Hello"會在常量池中存盤,str1也就指向常量池中的"Hello";
- str2查看常量池中是否存在"Hello",結果為存在,指向常量池中的"Hello";
- str3首先會在堆上new一個String類的物件,所以str3的這行代碼,產生了兩個物件,保存在堆疊中的str3與在堆上String的物件,String的物件保存的是在常量池中已經存在的"Hello",
- 輸出結果為:str1==str2輸出true,str1與str2同時指向常量區的"Hello",
- 輸出結果為:str1==str3輸出false,str3指向的是堆上的物件,
3. String 中‘+’號連接符
1. 介紹
- 在JAVA中,字串物件可以使用‘+’號來與其他物件進行連接,
- ‘+’號的連接程序是通過StringBuilder或StringBuffer中的append()方法進行實作的,
- 其他物件轉換為字串是通過toString()方法實作的,
2. ‘+’號連接符的運行程序
String str1="Hello";
int sum=10;
String str2=str1+sum;
而實際‘+’連接符背后的方法呼叫是這樣的,
String str1="Hello";
int sum=10;
String str2=((new StringBuffer()).append(str1).append(sum).toString());
3. ‘+’號連接符的速度
- 每次進行連接都會隱性new一個StirngBuffer物件,然后呼叫append,最后再toString回傳,
- 一般情況下使用不會造成代碼效率的降低,
- 當回圈多次進行‘+’號連接則會造成代碼效率的損失,
錯誤示范
String str="";
for (int i = 0; i < 100; i++) {
str=str+i;
}
System.out.println(str);
字串每進行一次連接都會隱式創建一個StringBuffer物件,
4. intern方法
- 上面說到,當直接進行雙引號宣告出來的String物件會直接存盤在常量池中,
- 而通過new一個String物件,來進行宣告的String物件則會存盤在堆中,
- 不是用雙引號宣告的String物件,可以使用intern方法,
- intern作用是將當前字串與常量池中已經存在的物件進行比較,如果存在回傳當前字串,如果不存在,將當前字串存盤到常量池中,
String str2=new String("He")+new String("llo");
str2.intern();
String str1="Hello";
System.out.println(str1==str2);
此時輸出結果為true,
5. Stirng中常用的方法
1. int length()
- 作用:回傳值為int型別,得到一個字串的字符個數包括(中,英,空格,轉義字符,字符)都計入長度,
- 實體:
String str="abcde";
int len=str.length();
- 此時:len=5,
2. char charAt(int index)
- 作用:回傳當前字串index位置的字符
- 實體:
String str="abcde";
char ch=str.charAt(3);
System.out.println(ch);
- 輸出:‘d’
3. Stirng subString(int beginIndex)
- 作用:從當前字串中beginIndex位置起到結尾的字符作為一個新的字串回傳,
- 實體:
String str1="abcdef";
String str2=str1.substring(2);
System.out.println(str2);
- 此時輸出:" cdef " ;
4. String subString(int beginIndex,int endIndex)
- 作用:從當前字串中beginIndex位置起到endIndex位置的字符作為一個新的字串回傳,
- 實體:
String str1="abcdef";
String str2=str1.substring(2,4);
System.out.println(str2);
- 此時輸出:" cd " ;
5. int compareTo(String anotherString)
- 作用:對當前字串與引數字串的內容以字典的順序進行比較,如果當前字串大于引數字串回傳>0的數字,反之回傳<0的數字,等于回傳0;
- 實體:
String str1="abcdef";
String str2="ABCDEF";
System.out.println(str1.compareTo(str2));
- 此時輸出:大于0的數
6. int compareTolgnoreCase(String anotherString)
- 作用:與compareTo方法不同于,此方法忽略大小寫比較,
- 實體:
String str1="abcdef";
String str2="ABCDEF";
System.out.println(str1.compareToIgnoreCase(str2));
- 此時輸出:0
7. boolean equals(Object anotherObject)
- 作用:將當前字串與引數比較,相等回傳true,反之回傳false;
- 實體:
String str1="abcdef";
String str2="ABCDEF";
System.out.println(str1.equals(str2));
- 此時輸出:false;
8. boolean equalsIgnoreCase(String anotherString)
- 作用:與equals方法不同與,此方法忽略大小寫,
- 實體:
String str1="abcdef";
String str2="ABCDEF";
System.out.println(str1.equalsIgnoreCase(str2));
- 此時輸出:true
9. String concat(String str)
- 作用:將引數字串連接到當前字串的尾部
- 實體:
String str1="abcdef";
String str2="ABCDEF";
System.out.println(str1.concat(str2));
- 此時輸出:" abcdefABCDEF ";
10. int indexOf(int ch或String str)
- 作用:查找當前字串中字符或子串,回傳字符或子串在當前字串中第一次出現的位置,沒有回傳-1,
- 實體:
String str1="abcdef";
System.out.println(str1.indexOf(99));
System.out.println(str1.indexOf("cde"));
- 此時輸出:2 , 2;
11. int indexOf(int ch或String str , int fromIndex)
- 作用:與indexOf一個引數的方法不同于,此方法是從當前字串的fromIndex位置之后開始查找,
- 實體:
String str1="abcdbc";
System.out.println(str1.indexOf("bc",3));
- 此時輸出:4
12. int lastIndexOf(int ch或String str)
- 作用:與indexOf一個引數方法不同于,此方法是從當前字串的尾部向前查找,
- 實體:
String str1="abcdefa";
System.out.println(str1.lastIndexOf('a'));
- 此時輸出:6
13. lastIndexOf(int ch或String str , int fromIndex)
- 作用:與indexOf兩個引數的方法不同于,此方法是從當前字串的fromIndex位置之前查找,
- 實體:
String str1="abcdefa";
System.out.println(str1.lastIndexOf('a',4));
- 此時輸出:0
14. String toLowerCase();
- 作用:回傳當前字串中所有字符小寫后的新字串,
- 實體:
String str1="ABCDEFG";
System.out.println(str1.toLowerCase());
- 此時輸出:" abcdefg " ;
15. String toUpperCase()
- 作用:回傳當前字串中所有字符大后的新字串,
- 實體:
String str1="abcdefg";
System.out.println(str1.toUpperCase());
- 此時輸出:" ABCDEFG ";
16. String replace(char oldChar,char newChar)
- 作用:將當前字串中與引數oldChar字符想匹配的字符全部替換為引數newChar,回傳新字串,
- 實體:
String str1="abadafa";
System.out.println(str1.replace('a','c'));
- 此時輸出:"cbcdcfc”;
17. String replaceFirst(String regex,String replacement)
- 作用:將當前字串中第一個與引數regex相匹配的子串替換為引數replacem字串,后回傳新的字串,
- 實體:
String str1="abadafa";
System.out.println(str1.replaceFirst("ada","cdc"));
- 此時輸出:“abcdcfa";
18. String replaceAll(String regex, String replacement)
- 作用:將當前字串中所有與引數regex相匹配的子串替換為引數replacem字串,后回傳新的字串,
- 實體:
String str1="abadafada";
System.out.println(str1.replaceAll("ada","cdc"));
- 此時輸出:“abcdcfcdc”;
19.String trim()
- 作用:截取當前字串兩端的空格,對字串中間空格不做處理
- 實體:
String str1=" aa aa ";
System.out.println(str1.trim());
- 此時輸出:”aa aa“;
20. Boolean contains(String str)
- 作用:判斷當前字串是否包含引數str字串,包含回傳true,不包含回傳false;
- 實體:
String str1="XXOO";
String str2="XX";
System.out.println(str1.contains(str2));
- 此時輸出:true;
21.String[] split(String str)
- 作用:將引數str作為分割符進行對當前字串的分割操作,回傳型別為字串陣列,保存每一段被分割的字串,
- 實體:
String str1="aXaXaOaOa";
String[] str3=new String[10];
str3=str1.split("X");
for (String s: str3) {
System.out.println(s);
}
- 此時輸出:“aaaOaOa”;
6. 字串與基本型別的轉換
1. 字串轉換為基本型別
parse… 需要轉什么型別就在…填寫什么型別的包裝類,
- byte parseByte(String s);
- short parseShort(String s);
- int parseInt(String s);
- long parseLong(String s);
- float parseFloat(String s);
- double parseDouble(String s);
2.基本型別轉換為字串型別,
String類中提供了String valueOf()方法,用于將基本型別轉換為字串型別,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/302222.html
標籤:java
下一篇:Java---繼承
