1. 程式人生 > >String類的記憶體解析:終極

String類的記憶體解析:終極

String類的記憶體解析:終極

1.Java String類:構造字串物件

  1. 常量物件:字串常量物件是用雙引號括起的字元序列。 例如:“你好”、“12.97”、"boy"等。
  2. 字串的字元使用Unicode字元編碼,一個字元佔兩個位元組
  3. 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.字串的特性

  1. String是一個final類,代表不可變的字元序列
  2. 字串是不可變的。一個字串物件一旦被配置,其內容是不可變的。

4.字串的記憶體解析:終極

  1. ①②③⑧原因是:點選進入String類底層解析
  2. String str5 = “Andriod”;str5 = str5 +“Handoop”;的程式碼執行順序Jvm記憶體解析圖,解釋了String是不可變的字元序列
    記憶體解析圖
  3. 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;
	}
}