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 則留言:

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

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

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

    回覆刪除