String是不變對象,JVM對String有一個優化:常量池 當使用字面量形式創建字符串對象時,JVM會將其緩存在常量池中,當再次使用該字面量創建字符串對象時就重用對象,避免內存中堆積大量內容一樣的字符串對象,減少內存開銷。
一個計算表達式參與運算的內容是確定值時,編譯器會進行計算然後編譯到.class文件中,避免JVM每次執行程序的時候再做運算。字符串爲不變對象,一旦創建內容不可修改。若改變則創建新對象。
public class StringDemo {
public static void main(String[] args) {
String s1="1a";
String s2="1a";
String s3="1a";
String s4="1"+"a";
String s5="1";
String s6=s5+"a";
String s7=new String("1a");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//true
System.out.println(s1==s4);//true
System.out.println(s1==s6);//false
System.out.println(s1==s7);//false
s1=s1+".";//創建一個新的對象
System.out.println(s1);
System.out.println(s2);
System.out.println(s2==s1);//false
}
}
int length( ):獲取當前字符串長度,不論什麼字符都是一個長度
int indexOf(String str):獲取給定字符串在當前字符串中位置,沒有返回-1
int indexOf(String str,int pos)
int lastIndexOf(String str)
char charAt(int index):獲取給定位置字符
這裏有一個判斷迴文的案例:
public class CharAt {
public static void main(String[] args) {
String string2="上海自來水來自海上";
boolean check=true;
for (int i = 0; i < string2.length()/2; i++) {
if (string2.charAt(i)!=
string2.charAt(string2.length()-1-i)) {
System.out.println("不是迴文");
break;
}
}
System.out.println("是迴文");
}
}
boolean startsWith(String str)
boolean endsWith(String str)
判斷字符串是否以給定的字符串開始或結尾的
String subString(int start,int end)
截取指定範圍內的字符串,區間左閉右開
trim( ):省去前面和後面的空白和縮進
String toUpperCase( )
String toLowerCase( )
英文轉換爲全大寫或小寫(驗證碼中常用)
字符串提供了一組重載的valueOf方法,可以將其他類型轉換爲字符串,但注意這是一組靜態方法,通過類名.調用
這裏有一個實現給定地址截取域名的綜合案例。
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String string=scanner.nextLine();
System.out.println(getName(string));
}
/**
* 獲取給定地址的域名
* @param string 給定的地址
* @return 域名
*/
public static String getName(String string) {
int frontPoint=string.indexOf(".");
int behindPoint=string.indexOf(".",frontPoint+1);
return string.substring(frontPoint+1, behindPoint);
}
}