第五個七天內容知識記錄

1、String的特性
①String是一個final類,是不可變的字符序列(當對字符串進行操作時,需要重新定義一個區域的值,不能夠對原來的區域內容進行修改)
②內部定義了final類型的char型數組,用於存儲字符串數據
③String字面量的定義方式,聲明的字符串值存放在字符串常量池中
④字符串常量池是不會存儲相同內容的字符串
在這裏插入圖片描述
2、String實例化的方式
①通過字面量定義的方式:生成的變量指向字符串常量池中
②通過new+構造器的方式:生成的變量指向堆中
在這裏插入圖片描述
3、字符串生成結果位置

String s1 = "hello";
String s2 = "world";

String s3 = "helloworld";
String s4 = "hello" + "world";
String s5 = s1 + "world";
String s6 = "hello" + s2;
String s7 = s1 + s2;

String s8 = s5.intern();
String s9 = (s1 + s2).intern();

System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s7);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false

System.out.println(s3 == s8);//true
System.out.println(s3 == s9);//true

如果聲明等號右邊是有變量名存在的,那麼編譯就會在堆中進行,結果也就生成在堆中;
如果聲明等號右邊單純是字符串或字符串(常量)拼接,那麼編譯在常量池中及進行,結果就生成在常量池中;
如果聲明等號右邊變量使用了intern()方法,那麼結果也生成在常量池中
如果變量是final修飾的,那麼編譯會在方法區中,是兩個常量的拼接,那麼結果也就在常量池中

一旦String類型變量調用了intern方法,那麼就一定會返回在常量池的地址值

4、字符串常量池在JDK不同版本的位置
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
5、String的常用方法
int length():返回字符串的長度
char charAt(int index):返回字符串對應位置的char型字符 return value[index];
boolean isEmpty():判斷字符串是否爲空(長度是否爲0) return length == 0;
String trim():返回去除原先字符串首末位置空格的字符串
boolean equals(Object obj):判斷兩個字符串內容是否相同
boolean equalsIgnoreCase(String anotherString):忽略大小寫判斷字符串內容是否相同
String concat(String str):等價於“+”的作用,拼接字符串
int compareTo(String anotherString):判斷兩個字符串大小(將每一個字符進行相減運算,求出總和)
String subString(int beginIndex):返回一個新的字符串,從beginIndex開始截取
String subString(int beginIndex, int endIndex):返回一個新字符串,從beginIndex開始,endIndex-1結束
boolean contains(CharSequence s):判斷字符串中是否存在指定char值序列
int indexOf(String str):返回子字符串第一次在字符串中出現的索引位置
String replace(char oldChar, char newChar):返回一個替換了oldChar後的字符串
String replace(CharSequence target, CharSequence replacement):返回替換了原來字符串中所有非target字符串的新字符串

6、String的轉化
String與字符數組(char[])的轉化:
String轉化爲char[]:String調用toCharArray()方法
char[]轉化爲String:將char[]放入String創建對象的構造器中
String與字節數組(byte[])的轉化:
String轉化爲byte[]:String調用getBytes()方法
byte[]轉化爲String:將byte[]放入String創建對象的構造器中

7、StringBuilder和StringBuffer
StringBuffer:可變的字符序列;線程安全,效率
StringBuilder:可變的字符序列;線程不安全,效率高;JDK5.0後新增的

StringBuffer/StringBuilder的創建:按給出的字符串的長度加上16的大小創建char[]數組
StringBuffer/StringBuilder的擴容:先判斷原有的數組加上新添數組長度之和是否大於16,若大於,則擴容;默認情況下擴容爲原來長度2倍+2,同時將,原有的數據複製到新的數組中

常用方法
append(String str):用於加入字符串/字符/數字進行拼接
delete(int start, int end):刪除指定位置的字符/字符串(不包括end位置的)
replace(int start, int end, String str):替換指定位置的內容(不包括end位置的)
insert(int offset, String str):在指定位置插入內容
reverse():當前字符串逆轉
int indexOf(String str):返回str首次在字符串中出現的位置

8、String、StringBuffer、StringBuilder效率
StringBuillder > StringBuffer > String

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章