運行結果: Hello JAVA Hello JAVA true b Hello JAVA false false false false 當創建String類型的變數並賦值時,會先到常量池中尋找是否存在這個常量的字元串,如果有則將引用(即地址)返回,如果沒有則在常量池中開闢空間並賦值沒這個給定的常 ...
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
Hello JAVA
true
b
Hello JAVA
false
false
false
false
當創建String類型的變數並賦值時,會先到常量池中尋找是否存在這個常量的字元串,如果有則將引用(即地址)返回,如果沒有則在常量池中開闢空間並賦值沒這個給定的常量的值,然後將引用返回。所以當重新給a賦值”b”時,在常量池中沒有找到”b”,然後在常量池中寫入”b”,然後將引用返回,但原來的b的引用依然指向原來的”a”,所以a=”b”後,變數a的引用與變數b的引用不一致,所以將返回false。
當使用String的構造函數初始化變數時,會直接在堆中重新開闢空間並賦值然後返回引用,所以使用new創建的變數的引用均與其他變數不一致,所以得到最後幾個false。
記錄下來,留待後查,同時方便他人。
可以聯繫我進行交流。[email protected]
謝謝支持。
2016.4.1
14:08