20081001

JAVA系列 - equal的String不==

結果很機車耶...
String s1 = "Hello world!";
String s2 = "Hello world!";
System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
System.out.println("s1==s2: " + (s1 == s2));
s1 = "Hello world!Hello world!".substring("Hello world!".length());
System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
System.out.println("s1==s2: " + (s1 == s2));

大概是因為substring出來的String是放在正常的heap
而不是Pool

2 則留言:

smallchou 提到...

要用這樣:
System.out.println("s1==s2: " + (s1.contentEquals(s2));

原因是:
Java 的 "==" 比的是參照,不是參照指向的內容。

mitivic 提到...

沒錯...
可是String是特別的物件
和小整數還有char一樣,是重複參照的
同樣的字串也會被重複參照
所以第一段的==才會true啊
可是substring出來的會是新物件
...
就不知標準是怎樣