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
留待後查,同時友善他人