字符串
String
Java編譯器對String類型有特殊處理,可用使用"…"來表示一個字符串。實際上字符串在String內部是通過一個數組表示的。
Java中字符串的一個重要特點是不可變。這種不可變性是通過內部的private final char[]字段,以及沒有任何修改char[]的方法實現的。
字符串比較
要比較兩個字符串是否相等,使用equals()
而不是==。
public class LearnString {public static void main(String[] args) {String s="asdfghjkl";System.out.println(s);s=s.toUpperCase();System.out.println(s);func1();}static void func1() {String s1="1234";String s2="1234";//Java把相同的字符串當作一個對象放入常量池System.out.println(s1==s2);System.out.println(s1.equals(s2));String s3="asd";String s4="ASD".toLowerCase();System.out.println(s3==s4);System.out.println(s3.equals(s4));}
}/*
輸出結果:
asdfghjkl
ASDFGHJKL
true
true
false
true*/
格式化字符串
字符串提供了formatted()
方法和format()
靜態方法,可以傳入其它參數,替換占位符,然后生成新的字符串:
System.out.println("this is %d\n".formatted(10));
System.out.println(String.format("this is %s\n","1234"));
類型轉換
可以使用靜態方法valueOf()
把任意基本類型或引用轉換為字符串。這是一個重載方法。也可以用其它函數把字符串轉換為對應類型。
String s5=String.valueOf(1234);
System.out.println(s5.equals("1234"));int i1 = Integer.parseInt("456");
System.out.println(i1);
String
和char[]
也可以互相轉換:
char[] chars="asdfgh".toCharArray();
String s6=new String(chars);
上述代碼中chars和s6所指向的對象并不是同一個,而是復制了一份chars所指向的字符串對象給s6。
StringBuilder
Java編譯器對String做了特殊處理,使得我們可以直接用+拼接字符串。雖然可以直接拼接字符串,但是,在循環中,每次循環都會創建新的字符串對象,然后扔掉舊的字符串。這樣,絕大部分字符串都是臨時對象,不但浪費內存,還會影響GC效率。
StringBuilder sb = new StringBuilder(1024);
for (int i = 0; i < 1000; i++) {sb.append(',');sb.append(i);
}
String s = sb.toString();