1. 程式人生 > >第四章動手動腦

第四章動手動腦

字符串轉換 地址 -- val com ont 方法 [] ima

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()  把字符串轉換為字符數組

第四章動手動腦