JAVA實訓總結 :String

String是特殊的類,與其餘基本類型並不相同,是被java封裝的類型
String底層組成對象爲數組與字典(字符集編碼表)
String 類型的字符串是存儲在JVM特別開闢的 字符串常量池中
 
建立與修改字符串的本質
String s = "hello"並不等價於String s = new String("hello")
執行String s = "hello"代碼
java會先在字符串常量池中尋找是否有hello;若是有,新建一個子串引用,將引用扔到s裏,若是沒有,便從字典裏尋找,在字符串常量池中開闢空間新建數組,找到h放入下標爲0的數組,再找到e放入下標爲1的數組,依次類推,直到將hello徹底存儲到數組,再創建一個子串引用,將引用扔給s
 
但在執行String s = new String("hello")時,可能會建立一個對象,也可能會建立兩個對象:
步驟:
1.String s定義一個名爲s的String對象,並不建立對象
2.= 對 s初始化,將某對象賦值給他
3.「hello」經過雙引號在編譯期間建立對象,這個建立方法與String s = "hello"同樣,先在字符串常量池中尋找是否有hello,有則不添加,沒有則將hello添加到字符串常量池中
4.new String() :運行期 在堆中開闢空間,存儲hello
注意:
無論串池裏有沒有"hello",它都會在堆中從新分配一塊內存,定義一個新的對象
此時s存放的是堆中hello的地址並不是字符串常量池中的地址
(String的intern()方法就是擴充常量池的 一個方法;當一個String實例str調用intern()方法時,Java查找常量池中是否有相同Unicode的字符串常量,若是有,則返回其的引用,若是沒有,則在常量池中增長一個Unicode等於str的字符串並返回它的引用)
例:
 1 String s0 = "abc";  2 String s1 = "abcd";  3 String s2 = new String("abc");  4 System.out.println(s0 == s2);//flase
 5 System.out.println("***********************************");  6 String s3 = s1+"d"; //拼接對象有new,會在堆中開闢空間
 7 String s4 = "abc"+"d"; //拼接對象無new,只在常量池中進行操做
 8 s2.intern(); //返回s2在常量池中的地址,常量池中若無s2則在常量池中添加s2,並返回它的地址
 9 System.out.println(s0 == s2);//flase
10 System.out.println("***********************************"); 11 s2 = s2.intern(); 12 System.out.println(s0 == s2);//true
13 System.out.println(s1 == s3);//flase
14 System.out.println(s1 == s4);//trun

 

 
字符串常量池中的字符串是不能夠改變的
String word = "Hello, ";
word = word.trim(); //返回一個先後不含任何空格的調用字符串的副本
String s = word.concat("小魚兒!"); //在 「Hello,」 後面拼接 「小魚兒!」
這時在字符串常量池中,會存在三個字符串:1."Hello, " 2."Hello," 3.」Hello,小魚兒!「
word = word.trim(); //不會將已經創建的子串1改變,只是將新建子串2的地址賦值給了word
若是原來的那個 "Hello, "沒有任何對象去引用它,虛擬機的垃圾回收機制將接收它。
 
字符串的比較「==」與equals()
"==":比較兩個字符串的首地址,而equals()比較兩個字符串的內容是否相同
String s1 = new String("abc");
String s1 = new String("abc");
System.out.print(s1 == s2);//輸出flase,地址不一樣
System.out.print(s1.equals(s2));//輸出true,內容相同
 
String經常使用方法
1.public String concat(String)
A.concat(B) //B字符串將被鏈接到A字符串後面
 
2.public int indexOf(int ch):
返回指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。
 
public int indexOf(int ch, int fromIndex):
返回從 fromIndex 位置開始查找指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。
 
int indexOf(String str):
返回指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。
 
int indexOf(String str, int fromIndex):
返回從 fromIndex 位置開始查找指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。
 
3.public String substring(int index)
提取從位置索引開始的字符串部分
 
public String substring(int beginindex, int endindex)
提取beginindex和endindex之間的字符串部分, 注意:beginindex<=s<endindex
 
public String trim()
返回一個先後不含任何空格的調用字符串的副本(將字符串空格去掉)
 
4.public String[] split(String c)
將一個字符串根據c分割爲若干子字符串,結果做爲字符串數組返回,但會將分隔符去掉
String words = "長亭外,古道邊,芳草碧連天,晚風拂柳笛聲殘,夕陽山外山";
String[] printWord = new String[100];
System.out.println("\n拆分後:");
printWord = words.split(",");
for (int i =0;i<printWord.length;i++){
System.out.println(printWord[i]);
}
控制檯輸出結果:
 
拆分後:
長亭外
古道邊
芳草碧連天
晚風拂柳笛聲殘
夕陽山外山
輸出後,做爲分隔符的逗號消失
 
5.public bollean equalsIgnoreCase():
比較兩個字符串,但不會區分大小寫
 
6.toLowerCase():
將字符串中的全部大寫字符改成大寫字符
 
7.toUpperCase():
將字符串中全部小寫字符串改成大寫字符
 
將基本類型轉換爲String類型的簡單方法:
1.最簡單的方法:基本類型變量+「 」,全部變量與String類型拼接都會轉換爲String類型
2. String s = String.valueOf(基本類型變量)
相關文章
相關標籤/搜索