字符串對象一旦被初始化就不會改變
String s = "abc";
s = "nba";
String s1 = "abc";
System.out.println(s==s1);
輸出結果:true
s只是一個引用變量,開始指向的是abc對象,後來指向nba對象,但是abc對象本身是不會改變的
在字符串建立的時候,內存中會建立一個字符串緩衝區,也可以理解成字符串常量池。開始時常量池是空的,在建立s的時候,系統會在常量池中尋找是否存在abc的字符串,如果不存在,就會建立這個字符串,然後把地址值賦給s。在建立s1的時候,系統也會先在常量池中尋找是否存在abc的字符串,發現存在後,就會直接把這個地址值賦給s1,所以s和s1的地址值是相等的,結果返回true。
字符串既然是對象,所以也可以通過new關鍵字來創建。String類中有String(String original)構造方法,可以接收字符串,也就是可以通過new來創建字符串對象。
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1==s2);
輸出結果:false
第一句是在字符串常量池中創建了一個對象,然後把這個地址值賦給s1。
第二句是在堆內存中創建了一個字符串abc對象,然後通過new創建了一個對象,再把字符串abc作爲參數傳遞給String構造函數。
所以他們的地址值是不一樣的。
調用equals函數進行比較輸出結果是false,因爲String類複寫了Object中的方法,比較的是字符串中的內容。
構造函數
String(byte[] bytes):通過byte數組構造字符串對象,byte數組中的內容會根據Unicode錶轉換成字符對象再連接起來組成字符串。
String(byte[] bytes, int offset, int length):通過byte數組的子數組構造字符串對象,offset:子數組第一個byte開始索引,length:子數組長度
String(char[] value):通過char數組構造字符串對象
String(cahr[] value,int offset ,int count):通過字符數組的子數組構造字符串對象,offset:子數組第一個字符的索引,count:子數組長度
String(StringBuffer buffer):通過StringBuffer構造字符串對象
例:byte[] b = {97,98,99,100}; char[] ch = {'q','w','e','r'}; StringBuffer sb = new StringBuffer(); sb.append("abc1"); sb.append("abc2"); sb.append("abc3"); sb.append("abc4"); String s1 = new String(b); String s2 = new String(b,1,3); String s3 = new String(ch); String s4 = new String (ch,1,3); String s5 = new String(sb); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); System.out.println(s5);
輸出結果:
abcd
bcd
qwer
wer
abc1abc2abc3abc4一般函數
獲取
1.1
int length():獲取字符串中字符的個數(長度)
1.2
char charAt(int index):根據位置獲取字符
1.3
int indexOf(int ch):返回指定字符在字符串中第一次出現的索引,參數爲字符或Unicode代碼點,如果存在該參數字符則返回索引,如果不存在返回-1
int indexOf(int ch, int fromIndex):返回指定字符在字符串中第一次出現的索引,在指定位置處開始搜索(向右)
int indexOf(String str):返回參數字符串在字符串中第一次出現的索引
int indexOf(String str, int fromIndex):返回參數字符串在字符串指定位置第一次出現的索引int lastIndexOf(int ch):返回指定字符在字符串中最後一次出現的索引
int lastIndexOf(int ch ,int fromIndex):返回指定字符在字符串中的索引,在指定位置反向搜索(向左)
int lastIndexOf(String str):返回參數字符串在字符串中最後一次出現的索引
int lastIndexOf(String str, int fromIndex):返回參數字符串在字符串指定位置最後一次出現的索引
1.4
String subString(int beginIndex):獲取字符串的子串,從開始索引一直到字符串末尾
String subString(int beginIndex, int endIndex)獲取字符串中一部分字符串,也叫子串。包括begin,不包括end。例:
String str = new String("eabcdebc"); System.out.println(str.length()); System.out.println(str.charAt(6)); System.out.println(str.indexOf('a')); System.out.println(str.indexOf('c',4)); System.out.println(str.lastIndexOf('e',4)); System.out.println(str.substring(2,5));
輸出結果:
8
b
1
7
0
bcd轉換
2.1 String[] split(String regex):將字符串編程字符串數組(字符串的切割),涉及到正則表達式
2.2 char[] toCharArray():將字符串變成字符數組,會根據Unicode將字符串中的內容變成對應的byte值。
2.3 byte[] getBytes():將字符串變成字節數組
2.4 String toUpperCase():將字符串中的字母變成大寫
String toLowerCase():將字符串中的字母變成小寫
2.5 String replace(char oldch, char newch):用新字符替換舊字符,返回一個新的字符串
String replace(String s1, String s2):用新字符串替換舊字符串,返回一個新的字符串
2.6 String trim():將字符串兩端的空格去掉
2.7 String concat(String str) :連接兩個字符串,將str連接到String的結尾
例:String str1 = "張三,李四,王五"; String[] arr = str1.split(","); char[] ch = str1.toCharArray(); String str2 = "ab你"; String s3 = "ABC".toLowerCase(); String s4 = str2.replace('a','z'); String s5 = " a b c ".trim(); String s6 = str1.concat("abc");
輸出結果:
abc
zb你
a b c
張三,李四,王五abc判斷
3.1
boolean equals(Object obj):判斷兩個字符串是否相同,如果相同返回ture,否則返回false。這個方法覆蓋了Object中的equals方法,Object方法中比較的是對象的地址值,這裏比較的是字符串中的內容。
boolean equalsIgnoreCase(String anotherString):忽略大寫比較字符串內容(原理是將字符串轉成小寫再進行比較)。
3.2
boolean contains(string str):字符串中是否包含參數字符串,包含就返回ture,否則返回false
3.3
boolean startsWith(string):字符串是否以指定字符串開頭
boolean endsWith(string):字符串是否以指定字符串結尾
例:String s = "abc"; System.out.println(s.equals("abc")); System.out.println(s.equalsIgnoreCase("AbC")); System.out.println(s.contains("ab")); System.out.println(s.startsWith("ab"));
輸出結果:
true
true
true
true比較
int compareTo(String anotherString):按照字典順序比較兩個字符串,結果返回一個Unicode差值,如果字符串相等則返回0。
例:String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1.equals(str2)); System.out.println(str1.compareTo(str2)); System.out.println(str1 == str2);
輸出結果:
true
0
false其他
valueOf(int i):返回int參數的字符串表示形式(沒有byte和short)