第四章動手動腦
1.請運行以下示例代碼StringPool.Java,查看其輸出結果。如何釋這種輸出結果?從中你能總結出什麽?
運行截圖:
在java中,內容相同的字符串常量只保存一份以節約內存,所以s0,s1,s2實際上引用的是同一個對象。
兩個變量值一樣時,字符串==符號比較地址,所以前兩個是true
當直接使用new關鍵字創建字符串對象時,雖然值一致,但仍然是兩個獨立的對象。兩個變量不同,所以是false
2.為什麽會有這樣的輸出結果? 從中你又能總結什麽?
給字串變量賦值意味著:兩個變量()現在引用同一個字符串對象“a”!,String對象的內容是只讀的,使用“+”修改s1變量的值,實際上是得到了一個新的字符串對象,其內容為“ab”,它與原先s1所引用的對象“a”無關,所以,返回false。代碼中的“ab”字符串是一個常量,它所引用的字符串與s1所引用的“ab”對象無關。
3.
請查看String.equals()方法,學習其實現方法。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) { //判斷anObject是不是String類的一個實例
String anotherString = (String)anObject; //把anObject賦值給anotherString
int n = count; //count是String的成員代表原始字符串長度
if (n == anotherString.count) {
char v1[] = value; //把原來的字符串和要比較的字符串以字符形式存入數組
char v2[] = anotherString.value;
int i = offset; //分別取數組下標
int j = anotherString.offset;
while (n-- != 0) { //遍歷數組,比較 數組元素是否相同
if (v1[i++] != v2[j++]) //在遍歷的過程中如果有不同的就返回false
return false;
}
return true; //相等返回true
}
}
return false; //不是String實例返回false
}
4.整理String類
length() 求長度
字符串A.length(); //返回int
charAt() 求指定位置的字符
char a=字符串A.charAt(第幾個);//返回一個字符
replace()
替換 原字符串中的某個字符並賦值給新字符串
語法
此方法定義的語法如下:
public String replace(char oldChar, char newChar)
toUpperCase()
轉換為大寫
被轉換的字符串.toUpperCase()
toLowerCase()
轉換為小寫
被轉換的字符串.toLowerCase()
trim() 去掉開頭結尾的空格
toCharArray() 把字符串轉換為字符數組
第四章動手動腦