天天看點

JAVAString初始化的引用問題

1 String a="Hello JAVA";
 2 
 3 String b=a;
 4 
 5 System.out.println(a);
 6 
 7 System.out.println(b);
 8 
 9 System.out.println(a==b);
10 
11 a="b";
12 
13 System.out.println(a);
14 
15 System.out.println(b);
16 
17 System.out.println(a==b);
18 
19 String c=new String("Hello JAVA");
20 
21 String d=new String("Hello JAVA");
22 
23 System.out.println(c==d);
24 
25 System.out.println(a==d);
26 
27 System.out.println(a==c);      

運作結果:

Hello JAVA

true

b

false

當建立String類型的變量并指派時,會先到常量池中尋找是否存在這個常量的字元串,如果有則将引用(即位址)傳回,如果沒有則在常量池中開辟空間并指派沒這個給定的常量的值,然後将引用傳回。是以當重新給a指派”b”時,在常量池中沒有找到”b”,然後在常量池中寫入”b”,然後将引用傳回,但原來的b的引用依然指向原來的”a”,是以a=”b”後,變量a的引用與變量b的引用不一緻,是以将傳回false。

當使用String的構造函數初始化變量時,會直接在堆中重新開辟空間并指派然後傳回引用,是以使用new建立的變量的引用均與其他變量不一緻,是以得到最後幾個false。

記錄下來,留待後查,同時友善他人。

可以聯系我進行交流。[email protected] 

謝謝支援。

                                                          2016.4.1

                                                         14:08

留待後查,同時友善他人

聯系我:[email protected]