String類的記憶體解析:終極
阿新 • • 發佈:2018-12-18
String類的記憶體解析:終極
1.Java String類:構造字串物件
- 常量物件:字串常量物件是用雙引號括起的字元序列。 例如:“你好”、“12.97”、"boy"等。
- 字串的字元使用Unicode字元編碼,一個字元佔兩個位元組
- String類較常用構造方法:
① String s1 = new String();
② String s2 = new String(String original);
③ String s3 = new String(char[] a);
④ String s4 = new String(char[] a,int startIndex,int count)
2. String str = “abc”;與String str1 = new String(“abc”);的區別?
點選上面問題的答案
3.字串的特性
- String是一個final類,代表不可變的字元序列
- 字串是不可變的。一個字串物件一旦被配置,其內容是不可變的。
4.字串的記憶體解析:終極
- ①②③⑧原因是:點選進入String類底層解析
- String str5 = “Andriod”;str5 = str5 +“Handoop”;的程式碼執行順序Jvm記憶體解析圖,解釋了String是不可變的字元序列
- String str4 = “JavaEE”+“Andriod”;String str8 = “JavaEEAndriod”;兩個寫法在記憶體中一樣,指向同一個地址。解釋了 ⑦
public class TestString { @Test public void test1() { String str1 = "JavaEE"; String str2 = "JavaEE"; String str3 = new String("JavaEE"); String str4 = "JavaEE"+"Andriod"; String str5 = "Andriod"; String str6 = str1 +str5;//指向str1和str的地址,類似於⑧,解釋了⑧ str5 = str5 +"Handoop"; String str7 = str6.intern();//這個方法表示拼到一起的,只看內容;⑤ ⑥ String str8 = "JavaEEAndriod"; System.out.println(str1 == str2);//true ① System.out.println(str1 == str3);//false ② System.out.println(str1.equals(str3));//true ③ System.out.println(str4 == str6);//false ④ System.out.println(str4.equals(str6));//true ⑤ System.out.println(str7 == str4);//true ⑥ System.out.println(str8 == str4);//true ⑦ Person p1 = new Person("AA"); Person p2 = new Person("AA"); System.out.println("^^"+(p1.name=p1.name));//true ⑧ } } class Person{ String name; Person(String name){ this.name = name; } }