1.建立物件
對於java程式中的字串直接常數,JVM會使用字串池來保存它們。當第一次使用某個字串直接常數時,JVM會將它放入字串池中進行快取。在一般情況下,字串池中的字串物件不會被垃圾回收。當程式再次需要使用該字串時,無需重新建立新的字串就可以直接讓引用變數直接指向字串中已有的字串。而使用new操作建立的字串物件則不指向字串池中的對象,但是可以使用intern()方法使其指向字串池中的對象。
public class StringDemo1 { public static void main(String[] args){ String str1 ="abc"; String str2 ="abc"; String str3 =new String("abc"); System.out.println(str1==str2);//true System.out.println(str1==str3);//false } }
常見問題
String str3 =new String("abc");
創建了幾個物件?
答:兩個
String str ="ab"+"cd";
創建了幾個物件?
答:一。 "ab"和"cd"都是常數被放在字串池中。因此只建立了一個abcd字串池中並將字串abcd保存在字串池中。
public class StringDemo1 { public static void main(String[] args){ String str1 ="ab"; String str2 ="cd"; String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//false System.out.println(str3==str5);//false } }
由上面代碼可知:只有引號包含文本的方式才創建的String對象才能被添加到字符串池中,對於包含new方法新建對象的”+“連接表達式他所產生的新對像不會被添加到字串池中。
但是有一種情況需要引起我們的注意:
public class StringDemo1 { private final static String str1 ="ab"; private final static String str2 ="cd"; public static void main(String[] args){ String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//true System.out.println(str3==str5);//true } }
這又是為什麼呢?原因是這樣的,對於常數來講。它的值是固定的,因此在編譯期間就能被確定了。
將上面的程式碼稍加改變看看會出現什麼情況。
public class StringDemo1 { private final static String str1 ; private final static String str2; static{ str1="ab"; str2="cd"; } public static void main(String[] args){ String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//false System.out.println(str3==str5);//false } }
str1和str2雖然被定義為常數,但是她們美譽馬上賦值,在運算出s的值前,她們何時被賦值,以及被賦什麼值都是變數,因此性質和變數一樣。只能在運行時被創建。
2.字串方法
取得方法
•int length()
•char charAt(int index)根據位置取得某個字元在字串中第一次出現的位置
•int indexOf(int ch,int fromIndex)從fromIndex指定位置開始,取得ch在字串中第一次出現的位置
•int indexOf(String str)
•int indexOf(String str,int fromIndex)
•int lastIndexOf(int ch)
判斷方法
•boolean startsWith( String str)
•boolean endsWith(String str)
•bolean isEmpty(String str)
•boolean equals(String str)
•boolean equalsIgnoreCase(String str);
•boolean equalsIgnoreCase(String str);•
•boolean equalsIgnoreCase(String str);•
•將字串轉換成字元陣列
•將字元陣列轉換成字串
•將字串轉換成字串位元組數組
獲取子字串[編輯分類String subString(begin,end)包含頭不包含尾
將字串轉換成大小寫Android(10)
String toUpperCase()
String toLowerCase()
將字串兩端的空格去除
String toLowerCase()將字串兩端的空格去除()
對兩個字串進行自然順序的比較
int compareTo(String str)
3.String 練習
1.字串翻轉
public class StringDemo2 { public static void main(String[] args){ String str = "avdkfasjks"; reverseMethod_1(str); } public static void reverseMethod_1(String str){ for(int i=str.length();i>0;i--){ System.out.print(str.charAt(i-1)); } } }
2.取得最大相同子字串
1.字串翻轉public class StringDemo2 { public static void main(String[] args){ String str1 = "avdkfasjks"; String str2 = "ewavdrtte"; System.out.println(commonMaxSubstring(str1, str2)); } public static String commonMaxSubstring(String str1,String str2){ int len = str1.length(); String str3 = null; outer: //i为子串的长度 for(int i = len;i>0;i--){ //j为子串的脚标 for(int j=0;j<len-i+1;j++){ str3=str1.substring(j,j+i); if(str2.contains(str3)) break outer; } } return str3; } }
reee Java字串詳解的實例介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!